创建NSManagedObjectContext以在线程中使用

时间:2013-03-21 16:56:09

标签: objective-c cocoa core-data

我正在尝试创建NSManagedObjectContext的新实例,以便我可以在主要线程之外的线程中执行获取请求。据我所知,每个线程都需要它自己的实例,尽管它们可以共享商店。

我的应用是基于核心数据文档的应用。

读了一下here我得到了这段代码:

NSManagedObjectContext *managedObjectContextForThread = nil;
NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:self.managedObjectModel];

if (coordinator != nil) {
    managedObjectContextForThread = [[NSManagedObjectContext alloc] init];
    [managedObjectContextForThread setPersistentStoreCoordinator:coordinator];
    [managedObjectContextForThread setUndoManager:nil];
}

它运行但是当我执行获取时我得不到任何结果,我怀疑是因为NSPersistentStoreCoordinator没有正确设置。

我应该如何设置商店协调员与我的主商店合作?或者我在这里还缺少什么?

2 个答案:

答案 0 :(得分:5)

Apple的'通常推荐的方法'是在上下文中共享一个持久存储协调器。理想情况下,您已经拥有对应用程序主要托管对象上下文的引用,并使用该上下文的持久性存储协调器。

NSManagedObjectContext *managedObjectContextForThread = [[NSManagedObjectContext alloc] init];;
[managedObjectContextForThread setPersistentStoreCoordinator:myMainContext.persistentStoreCoordinator];

查看Apple的Core Data Programming Guide

中的“与核心数据并发”

答案 1 :(得分:0)

您必须将持久性存储添加到商店协调器,然后将持久性存储添加到托管对象上下文。

if ( [coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:0 URL:storeUrl options:options error:&error] ) {
    managedObjectContextForThread = [[NSManagedObjectContext alloc] init];
    [managedObjectContextForThread setPersistentStoreCoordinator:coordinator];
}
else {
// investigate 'error'
}