我是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];

我有三个问题:
  • 什么时候应该使用NSData将对象保存到一个文件/多个文件中?何时应该遵循<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)。以下链接是您要求的两级编码的合适示例:

  • Archiving Objective-C Objects with NSCoding

  • 希望这可以帮助!

    关于ios - NSCoding和NSData之间有什么关系?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22678014/

    10-13 03:59