所以我正在制作一个框架来保存用于操作核心数据数据库的所有代码。我最终遇到的问题是这个。
我有一个返回新项目的方法
- (NSManagedObject *)createItem;
一旦他们修改了该项目,就会调用
- (void)save;
这必须能够在多个线程中执行,因此我从方法返回的托管对象必须在线程内具有一致的 NSManagedObjectContext。我解决这个问题的解决方案是创建一个 NSMutableDictionary 来保存对 NSManagedObjectContexts 的引用
[NSThread hash]
作为键。这很好用。唯一的问题是,一旦线程完成,我就无法摆脱上下文。
有人知道我如何检测到这一点吗?
这是我的托管对象上下文方法的代码
// Return Managed Object Context for Framework
- (NSManagedObjectContext *)managedObjectContext
{
// Get Thread Hash Value
NSThread * currentThread = [NSThread currentThread];
NSNumber * hashValue = [NSNumber numberWithUnsignedInteger:[currentThread hash]];
// Get Context From Thread Hash
NSManagedObjectContext * context = [self.managedObjectContexts objectForKey:hashValue];
// Check Context Exists
if (!context)
{
// Create Managed Object Context With Persistent Store Coordinator In Main Thread
NSPersistentStoreCoordinator * coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
context = [[NSManagedObjectContext alloc] init];
[context setPersistentStoreCoordinator:coordinator];
}
// Add Context To Available Contexts
[self.managedObjectContexts setObject:context forKey:hashValue];
}
// Return
return context;
}
最佳答案
看看如何使用每个 NSThread
上可用的 threadDictionary
。通过这种方式,您可以轻松获取线程的 MOC(或者知道是否没有),并且将为您处理清理工作。
关于objective-c - 在 Core Data 管理类中处置 NSManagedObjectContexts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22309163/