iOS中的持久性:属性列表序列化与NSUserDefaults与核心数据的对比

时间:2011-10-13 08:04:28

标签: iphone ios core-data persistence nsuserdefaults

我是iOS新手。我的要求是从应用程序内部收集几个错误字符串,并定期将它们发布到我的Web服务。每个错误都是一个简单的NSString~100个字符长。我可能会在帖子之间积累最多1000条错误记录。实际的帖子将在后台线程上完成,但错误日志的收集和持久性将在主线程上完成。我试图在以下一种持久性方法之间做出决定:
1)属性列表序列化(我的日志记录是NSSrings的NSArray)
2)NSUserDefaults(我的NSArray将是NSUserDefaults中某些键的值对象)
3)核心数据(但只有一个NSManagedObject用于日志,其中只有一个属性,日志消息字符串)

请注意,我说“日志”,但我正在手动执行所有日志记录工作。 (还有其他选择吗?)

对我来说,一个重要因素是逐步将日志记录保存在磁盘上。换句话说,如果我已经持有500条日志记录,并且501st出现,我不想为了效率原因重新保留500 + 1条日志记录。 似乎使用选项(1)和(2)我不能逐步持久化东西。我想我每次都要重写blob。我还在学习选项(3)。 想到就此得到专家意见:)

2 个答案:

答案 0 :(得分:1)

*更新* 不需要核心数据或类似的东西。

只需在Documents目录中调用log.txt创建一个文本文件(一切都很好)。 当您准备好持久保存NSArray时,请使用以下方法:

- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)flag

无论何时准备就绪,您都可以发布文件,清除其内容,然后就可以使用下一个数组了。


我会使用Core Data只是因为它使一切变得如此简单。

另一方面,你实际上不必使用其中任何一个。如果我正确地阅读您的问题,您已经将日志保存在日志文件中。

您可以在NSUserDefaults中存储lastPost日期,找到在lastPost日期之后创建的日志文件,发布日志文件,更新lastPost日期并完成。

在不相关的说明中,发送此类日志可能会违反应用指南,具体取决于您发送的内容以及对用户的清晰程度。

答案 1 :(得分:0)

您也可以使用NSJSONSerialization,它可以将您的数组以JSON文档格式写入文件,如果您想稍后将数据发送到服务器,这通常很有用。属性列表和JSON的规则非常相似,但不完全相同。