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

Iphone iOS中的持久性:属性列表序列化与NSUserDefaults与核心数据,iphone,ios,core-data,persistence,nsuserdefaults,Iphone,Ios,Core Data,Persistence,Nsuserdefaults,我是iOS新手。我的要求是从应用程序内部收集几个错误字符串,并定期将它们发布到我的web服务。每个错误都是一个约100个字符长的简单NSString。我可能会在帖子之间累积多达1000条错误记录。实际的post将在后台线程上完成,但错误日志的收集和持久性将在主线程上完成。我正在尝试选择以下持久性方法之一: 1)属性列表序列化(我的日志记录将是NSStrings数组) 2)NSUserDefaults(我的NSArray将是NSUserDefaults中某些键的值对象) 3)核心数据(但日志只有一

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

请注意,我说的是“日志”,但我是手动完成所有日志工作的。(还有其他选择吗?)

对我来说,一个重要的因素是以增量方式将日志记录保存在磁盘上。换句话说,如果我已经持久化了500条日志记录,并且出现了501条,出于效率原因,我不想重新持久化500+1条日志记录。 看来,使用选项(1)和(2)我无法以增量方式持久化内容。我想我每次都得重写这个斑点。我还在学习选项(3)。
我刚想听听专家的意见:)

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

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

- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)flag
无论何时准备就绪,都可以发布文件,清除其内容,然后就可以开始下一个数组了


我会使用核心数据,因为它让一切变得如此简单

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

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


另一方面,发送这样的日志可能违反应用程序准则,具体取决于您发送的内容以及对用户的清晰程度。

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

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

- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)flag
无论何时准备就绪,都可以发布文件,清除其内容,然后就可以开始下一个数组了


我会使用核心数据,因为它让一切变得如此简单

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

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


另一方面,发送这样的日志可能违反应用程序准则,具体取决于您发送的内容以及对用户的清晰程度。

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

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

日志与应用程序的行为有关,而与用户无关,例如,应用程序无法加载某些媒体。我不清楚日志记录过程,我计划在内存中的NSArray中收集错误字符串,每隔一段时间将它们持久化,然后每隔一段时间发布一次。我不确定是否有任何非手动的日志记录选项。。你能给点建议吗?谢谢你,索斯伯恩。但我还有一个要求,在发布期间,我必须定期将日志记录保存到文件中,以防应用程序崩溃和我丢失大量记录。假设在每50条记录之后,我将它们保存在log.txt文件中。在接下来的50年中,我将不得不删除文件并重新保存100条记录,以此类推,直到最多保存1000条记录。也许我只是在寻找增量保存的方法。看起来核心数据允许这样做,但对于这个用例,我认为平面文件已经足够好了。我会接受这个答案。谢谢。这样做没有问题。在编写文件之前,将该文件的内容添加到数组中(即使我们说的是NSArray,您也可能会使用可变数组),然后写出该文件。它将包含您的旧对象(因为您已将它们添加到阵列中)和新对象。如果数据在写入过程中崩溃,请确保以原子方式写入以保存数据。日志与应用程序的行为有关,而与用户无关,例如,应用程序无法加载某些媒体。我不清楚日志记录过程,我计划在内存中的NSArray中收集错误字符串,每隔一段时间将它们持久化,然后每隔一段时间发布一次。我不确定是否有任何非手动的日志记录选项。。你能给点建议吗?谢谢你,索斯伯恩。但我还有一个要求,在发布期间,我必须定期将日志记录保存到文件中,以防应用程序崩溃和我丢失大量记录。假设在每50条记录之后,我将它们保存在log.txt文件中。在接下来的50年中,我将不得不删除文件并重新保存100条记录,以此类推,直到最多保存1000条记录。也许我只是在寻找增量保存的方法。看起来核心数据允许这样做,但对于这个用例,我认为平面文件已经足够好了。我会接受这个答案。非常感谢。