我是iOS编程的新手,我刚刚学习了一些有关保存/加载对象的基础知识。在我的书中,有一个将图像保存到文件的示例:
NSData *data = UIImageJPEGRepresentation(someImage, 0.5);
[data writeToFile:imagePath atomically:YES];
我的书中还提供了一个将“文章”对象保存到文件中的示例(“文章”对象的标题字符串和作者字符串):
essay.m
符合<NSCoding>
协议(protocol):- (void) encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:self.essayTitle forKey:@"essayTitle"];
[aCoder encodeObject:self.essayAuthor forKey:@"essayAuthor"];
}
- (instancetype) initWithCoder:(NSCoder *)aDecoder
{
self = [super init];
if (self) {
_essayTitle = [aDecoder decodeObjectForKey:@"essayTitle"];
_essayAuthor = [aDecoder decodeObjectForKey:@"essayAuthor"];
}
return self;
}
在
essayStore.m
中:[NSKeyedArchiver archiveRootObject:self.myEssay toFile:somePath];
我有三个问题:
<NSCoding>
协议(protocol)将对象保存到一个文件/多个文件中? 谢谢!
最佳答案
1. NSCoding
是一种协议(protocol),并且是将数据保存到文件的方法之一。优点是,如果使用此方法,则可以像这样存储对象。NSData
,如Apple class reference中所述,是typically used for data storage and are also useful in Distributed Objects applications, where data contained in data objects can be copied or moved between applications.
2. ,这取决于您是否需要保存数据。通常,它足以将所有对象存储在一个文件中,而这些通常是代表实体的对象。
3 。您可以引用以下教程:
-列表项NSCoding Tutorial for iOS
编辑:
如果您想了解有关编码图像的信息,请查看此stackoverflow answer。
虽然我不希望对图像进行编码。如@Anoop Vaidya在评论中提到的,需要将复杂对象转换为原始数据。
是的,可以对您创建的类的对象进行编码。但是您必须在其中实现NSCoding协议(protocol)。以下链接是您要求的两级编码的合适示例:
希望这可以帮助!
关于ios - NSCoding和NSData之间有什么关系?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22678014/