我正在尝试创建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没有正确设置。
我应该如何设置商店协调员与我的主商店合作?或者我在这里还缺少什么?
答案 0 :(得分:5)
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'
}