【发布时间】:2013-04-24 13:58:21
【问题描述】:
想弄清楚这一点我快疯了。我正在开发一个从网络服务器同步数据的应用程序。有一个后台线程将数据从服务器拉到应用程序。同时,我正在对 UI 进行更改。 UI 上更改的值正在保存到前台的核心数据中。
在整个应用程序中,我每次创建一个 fetchController 时都会从应用程序委托中获取一个 managedObjectContext 。应用委托代码
- (NSManagedObjectContext *)managedObjectContext
{
if (__managedObjectContext != nil) {
return __managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
__managedObjectContext = [[NSManagedObjectContext alloc] init];
[__managedObjectContext setPersistentStoreCoordinator:coordinator];
}
return __managedObjectContext;
}
现在的问题是我在尝试保存上下文时遇到错误。错误在代码中随机发生。一旦我对任何实体进行更改,我就会保存上下文。此外,我在每个实体中都有两种关系,一种是与它的孩子一对多,另一种与它的父母是对 - 一种。所有关系都有适当的逆。
我认为我在这里通过保持一个上下文在概念上做错了。您能否建议在后台和前台线程都在读取和写入 coredata 的情况下我应该如何管理上下文。谢谢。
【问题讨论】:
-
您正在使用线程限制初始化您的 MOC,因此您只能在创建它的线程上使用它……很可能是主线程。它本质上没有任何问题……但是您如何为后台保存创建 MOC?如果您使用的是相同的 MOC,那就是您的问题。阅读有关 Core Data 并发的文档。
标签: core-data nsmanagedobjectcontext