2009-08-21 129 views
2

我有一个基于默认xcode模板的核心数据应用程序,我有用于查看数据的主UI,然后我有一个下载/插入/编辑数据的后台线程。可可核心数据 - 背景线程

我觉得应用程序启动时我可以创建两个NSManagedObjectContext,一个应用程序读取,另一个在后台线程中写入,然后写完后它会调用performSelectorOnMainThread来同步两个NSManagedObjectContext对象。

我对可可相当陌生,想知道是否有人可以确认这应该工作,并且没有人知道关于此的示例或讨论,因为我无法使同步正常工作。

回答

1

您是否手动创建后台线程?如果是的话,我会推荐在NSURLConnection中使用Cocoa的委托模式来做后台的实际下载和前台数据的处理。

如果您觉得仍然需要手动创建线程,请阅读核心数据编程指南的Multi-Threading in Core Data部分以获取更多信息。

+0

感谢您的回应,我手动创建线程,因为我需要下载数据,处理数据,根据条件下载更多的数据,然后将数据插入核心数据,而用户浏览已存储的数据。我已经读过那个苹果文档,但是我错过了关于有两个持续性商店协调员的问题,我会再试一次。 – Craig 2009-08-21 21:49:00

+0

我为每个线程创建了一个单独的托管对象上下文,并共享一个持久性存储协调器,但是我无法在后台线程完成运行后重新加载或合并主要托管对象中的数据,我会认为必须有一个简单的方法来告诉它重新加载主线程,但我似乎无法找到它。 – Craig 2009-08-21 22:16:33

+0

您可以使用名为-performSelectorOnMainThread:withObject:waitUntilDone的NSObject方法调用主线程上的方法:同样,我会推荐使用NSURLConnection的异步方法,而不是通过您自己的线程同步执行。 – 2009-08-22 04:17:15

3

你想看看-[NSManagedObjectContext mergeChangesFromContextDidSaveNotification:]。注册工作线程的托管对象上下文中的更改通知。在通知回调中,调用您的主线程的托管对象上下文的mergeChangesFromContextDidSaveNotification。确保您在主线程上调用此方法(更改通知将在工作线程上发布)。