在iOS中保存数据的选项有哪些?

时间:2010-11-02 05:09:48

标签: ios objective-c

我想序列化一堆数据并将其保存到文件中,然后能够(自然地)加载它并使用我编写的功能播放它。 (对不起,如果我的术语没有了,我就是这样的新手了。)iOS的最佳方法是什么?从这里查看文档:

Standard Application Behaviors Guide

我收集到了我应该使用的内容 NSSearchPathForDirectoriesInDomains用于查找适当的存储目录根目录(Documents?),然后使用NSData存储我创建的这些数据缓冲区并将其写入文件。我是否发现了这个或者我弄错了?还有其他任何圣人的建议吗?

3 个答案:

答案 0 :(得分:18)

你可以使用plist 在不使用核心数据的情况下保存字符串或其他数据列表非常容易 见Property List Programming Guide

例如,此代码将保存一个对象(rootObj),该对象可以是数组或字典:

NSString *error;
NSString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *plistPath = [rootPath stringByAppendingPathComponent:@"yourFile.plist"];
NSData *plistData = [NSPropertyListSerialization dataFromPropertyList:rootObj
                                                               format:NSPropertyListXMLFormat_v1_0
                                                     errorDescription:&error];
if(plistData) {
  [plistData writeToFile:plistPath atomically:YES];
}
else {
  NSLog(@"Error : %@",error);
  [error release];
}

受支持的课程有一些限制(参见指南)

答案 1 :(得分:14)

这取决于您所写的数据。如果您最想要序列化对象,请参阅NSCoding协议。如果您有一些不是类的简单数据结构,您可以将其存储到NSDictionary并将其保存到plist中。如果您有大量数据(例如数千个浮点数或类似的东西),您可能希望使用NSData保存它,如您已经暗示过的那样。无论如何,请务必阅读Archives and Serializations Programming Guide,以免重新发明轮子。

答案 2 :(得分:1)

是的,非常正确的方向。你需要实现一些东西,在你的对象上称为NSCoding协议,以便能够存档和放大。将其解压缩到NSData中。看例子: Saving files on iOS using NSFileManager