基本的に、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として含めるかについて別の疑問があります。