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

Joe*_*oey 21 objective-c ios

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

标准应用程序行为指南

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

Ben*_*oît 18

你可以使用plist.
在不使用核心数据的情况下保存字符串或其他数据列表非常容易.
请参阅" 属性列表编程指南

例如,此代码将保存一个对象(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];
}
Run Code Online (Sandbox Code Playgroud)

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

  • 不推荐使用dataFromPropertyList. (4认同)

zou*_*oul 14

这取决于您正在编写的数据.如果您最想要序列化对象,请参阅NSCoding协议.如果您有一些不是类的简单数据结构,您可以将其存储到一个  NSDictionary并将其保存到plist中.如果您有大量数据(例如数千个浮点数或类似的东西),您可能希望使用NSData已经暗示的方法保存它.在任何情况下,请务必阅读档案和序列化编程指南,以免您重新发明轮子.


Nav*_*mon 1

是的,方向非常正确。您需要在您的对象上实现称为 NSCoding 协议的东西,以便能够将其存档和取消存档到 NSData 中。请参阅示例: 使用 NSFileManager 在 iOS 上保存文件