iOS:存档/取消归档对象集合的正确方法

时间:2013-05-15 21:47:45

标签: ios nskeyedarchiver

刚刚开始学习iOS,我有一个非常基本的问题:归档/取消归档整个对象集合的正确方法是什么?

据我所知,您首先需要在类上实现NSCoder协议。假设我有一个可以正确归档和解压缩的类,我一直在研究一个看起来像这样的例子:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString *docsDir = [paths objectAtIndex:0];
NSString *archivePath = [docsDir stringByAppendingPathComponent:@"thing.model"];
Thing *thing = [[Thing alloc] init];
[NSKeyedArchiver archiveRootObject:thing toFile:archivePath];

现在,这只是保存一个Thing作为文件thing.model,对吗?

所以,如果我的应用程序有很多“东西”并且我想将它们全部归档,那么你如何处理它?<​​/ p>

更具体地说(如果某些上下文有帮助),我正在开发一个由Web服务支持的应用程序,我希望能够在应用程序上创建/编辑记录,将它们保存到磁盘,并定期将本地保存的对象与Web服务同步。

谢谢!

2 个答案:

答案 0 :(得分:4)

集合类符合NSCoding。因此,如果您有NSArrayThing个对象,只需归档/取消归档数组。

答案 1 :(得分:0)

  

所以,如果我的应用程序有很多“东西”并且我想将它们全部归档,那么你如何处理它?<​​/ p>

如果您想单独保存这些内容,请使用-encodeObject:forKey:将一个对象(以及稍后用于检索它的密钥)添加到存档。

正如rmaddy指出的那样,如果所有内容都在集合中,您可以将集合归档为单个对象。同样,您可以使用-encodeObject:forKey:执行此操作,或者如果集合是存档中的唯一内容,则可以使用archiveRootObject:toFile:按照上述方式执行此操作。