我基本上需要在后台线程中更新核心数据而不阻塞 UI 并保存它。保存后应重新加载表视图以查看更改。所以为了做到这一点我想使用
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:无法找到实体名称“LogDetails”的 NSManagedObjectModel”
任何人都可以解释为什么我会收到此错误
另外,我还有一个疑问,是否将其包含为后台 ManagedObjectContext 或子 ManagedObjectContext,并将父级作为主线程 ManagedObjectContext
一个 NSManagedContext 只能在一个线程中使用。在线程之间传递 NSManagedObject 可能是不安全的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)