In this question, octy wrote:如何防止NSManagedObjectContext在保存时线程死亡时损坏数据库?
顺便说一句,如果你保存在后台 线程,你还需要考虑什么 发生在你的应用程序被终止,同时 保存操作正在进行中。 后台线程被kill 远程,而看门狗等待5 秒为主线程完成 了。
现在我花了整天的时间来实现NSOperation并直接在NSOperation子类中创建NSManagedObjectContext实例,因此每个NSOperation都拥有它自己的非共享MOC。但是现在这是一个非常糟糕的消息,因为这种可能会一直发生的情况会破坏核心数据库。我的意思是它不能开始在sqlite3文件中写入一个半字节的东西,然后立即停止。
然后还有另一个问题:在我的NSOperations中,我也使用NSFileManager做文件I/O。
那么我能做些什么呢?我必须在应用程序中跟踪所有正在运行的NSOperations和NSOperationQueues,并在应用程序终止时快速在App Delegate中处理它们,以便我可以将NSOperations告诉SFF(Save F ***** g Fast)或取消所有操作,抓住他们的MOC并立即“硬保存”它们?解决这个问题的最佳做法是什么?
为什么我第一次听到我的职业生涯?我的意思是NSOperationQueue和核心数据中没有一个提到书籍甚至提到这个问题,但它似乎是一个随机的应用杀手,如果我们不明确地关心这个问题,它会强制用户重新安装(并可能丢失大量数据)。
我开发了这个NSOperation子类来完成你所说的https://github.com/veritech/FRCoreDataOperation。在我的应用程序平均运行期间,我将创建超过100个在串行NSOperationQueue中运行的这些应用程序。而且,当应用程序终止/后台服务时,我会取消所有操作,并且我从来没有发生过腐败问题。随意看看课程,也许它可以帮助你。 – Jonathan 2011-06-02 00:24:02
您必须在保存操作中取消*,因为它可能发生在现实中。这是真正的问题。 – 2011-06-03 10:50:04