2011-04-22 62 views
4

当讨论使用具有后台线程的核心数据时,Apple "Concurrency with Core Data" documentation声明如下。在后台线程上安全保存核心数据管理对象上下文的正确方法?

保存在后台线程是容易出错的

异步队列和线程不会阻止应用程序 狭路相逢。 (具体而言,所有基于NSThread线程是“分离” - 见 的并行线程完整的文档细节和进程运行 只有等到所有未脱离线程已经退出。)

,特别是:

如果您需要保存在后台线程上,则必须编写其他代码,以便主线程可以阻止应用程序退出,直到完成所有保存操作。

在IOS应用程序中实现这个功能的推荐方法是什么?

回答

5

在应用代理applicationWillTerminate和相关方法中,您需要检查是否有后台线程有未保存的更改,并在允许应用终止或进入后台之前保存它们。

+1

+1对,但一定要注意,“相关方法”包括'applicationDidEnterBackground' - 应用程序可以进入后台,然后暂停并终止,无需任何进一步通知。 – 2011-04-22 16:06:27

+1

谢谢。我没有在IOS框架内用线程做过很多,你是否有一些示例代码,或者你可以指示我如何从应用程序中的未保存更改访问和检查线程的一些文档的方向委托类。 – lucasweb 2011-04-22 18:06:17

+0

一切都取决于你如何真正实现了线程。例如,如果您使用的是“NSOperationQueue”,则可以使用“waitUntilAllOperationsAreFinished”。 – paulbailey 2012-07-29 09:47:13

0

我建议看看使用魔法记录(https://github.com/magicalpanda/MagicalRecord/)。它极大地简化了处理后台线程上的核心数据。我最近发现这个并将其用于一个项目。我们现在已经进行了维护工作,以更新各种现有的应用程序以使用新的魔法记录核心数据包装器。在我们使用它的几周内,它为我们节省了大量的时间和挫折。

相关问题