我需要在后台线程中基本更新我的核心数据而不阻止UI并保存它。保存后应重新加载表View以查看更改。所以为了做到这一点,我想到了使用
dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// Add code here to do background processing
NSManagedObjectContext *context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
self.backgroundManagedObjectContext = context;
if(self.managedObjectContext == nil)
self.managedObjectContext = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
self.backgroundManagedObjectContext.parentContext = self.managedObjectContext;
//update data
[self getDataFromFile];
dispatch_async( dispatch_get_main_queue(), ^{
// Add code here to update the UI/send notifications based on the
// results of the background processing
[[NSNotificationCenter defaultCenter] postNotificationName:@"ReloadAppDelegateTable" object:nil];
[context release];
});
});
当我尝试获取数据时在getDataFromFile中
if(![NSThread isMainThread])
{
NSEntityDescription *entity = [NSEntityDescription entityForName:@"LogDetails" inManagedObjectContext:self.backgroundManagedObjectContext];
[request setEntity:entity];
logs = [self.backgroundManagedObjectContext executeFetchRequest:request error:nil];
}
我收到错误 * 由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'+ entityForName:无法找到实体名称的NSManagedObjectModel'LogDetails''
任何人都可以解释我收到此错误的原因
另外,我还怀疑是否将其作为后台managedObjectContext或子managedObjectContext包含父作为主线程managedObjectContext
答案 0 :(得分:1)
一个NSManagedContext只能在一个线程中使用。在线程之间传递NSManagedObject可能不安全。