기본적으로 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 또는 parent managedObjectContext를 부모 스레드로 포함할지 여부에 대해서는 의문의 여지가 있습니다.
나는이 위대한 튜토리얼을 읽는 것이 좋습니다 : http://www.cocoanetics.com/2012/07/multi-context-coredata/ – rckoenes
나는 몇 링크를 읽습니다. http://stackoverflow.com/questions/2138252/ core-data-multi-thread-application, http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/CoreData/Articles/cdConcurrency.html, http://www.cimgf.com/2011/05/04/core-data-and-threads-the-headache없이 그리고 여전히 링크를 포함하여 http://www.cocoanetics.com/2012/07/multi-context-coredata/하지만 여전히 나는 아닙니다 내가 잘못 가고있는 곳을 찾을 수있다 – aparna
어디서 parentObject를 설정합니까? 'self.backgroundManagedObjectContext = main.managedObjectContext'처럼'NSPrivateQueueConcurrencyType'을 사용할 때'PersistentStoreCoordinator'를 설정할 필요가 없으며'[self.backgroundManagedObjectContext performBlock : (block)]'을 사용해야합니다. – rckoenes