그래서 같이 백그라운드 스레드에서 핵심 데이터를 업데이트 :핵심 데이터가 업데이트되지 않는 이유는 무엇입니까?
의 tableview의 각 셀에entry.message = [self contentForNoteWithEDML:note.content];
entry.dataLastModified = [NSDate date];
[entry.managedObjectContext save:nil];
dispatch_async(dispatch_get_main_queue(), ^{
NSError *error;
if (![[self fetchedResultsController] performFetch:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
}
[self.tableView reloadData];
});
, 그것은 fetchedResultsController
에서 다른 항목을 표시합니다. 주 스레드에서 dataLastModified
날짜의 을 cellForRowAtIndexPath
에두고 날짜가 가장 최근 값으로 변경되지 않습니다. 앱을 닫고 다시 실행하면 셀 내용이 업데이트되고 dataLastModified
날짜가 올바른 값으로 변경됩니다.
필요에 따라 데이터가 변경되는 것 같지만 앱이 다시 시작될 때까지 내 tableview
에 변경 사항이 표시되지 않습니다. 어떤 아이디어?
편집 : 배경 스레드에서 을 cellForRowAtIndexPath
에서 수행하면 올바른 데이터를 얻을 수 있지만 주 스레드에서 수행하는 것은 아닙니다.
편집 2 : 내 배경 컨텍스트 작동 방법 :
NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
[notificationCenter
addObserver:[AppDelegate applicationDelegate].coreDataManager
selector:@selector(mergeChanges:)
name:NSManagedObjectContextDidSaveNotification
object:[AppDelegate applicationDelegate].coreDataManager.managedObjectContext];
NSPersistentStoreCoordinator *journalDataPSC = [AppDelegate applicationDelegate].coreDataManager.managedObjectContext.persistentStoreCoordinator;
dispatch_queue_t addOrUpdateEntriesQueue = dispatch_queue_create("com.App.AddOrUpdateEntries", NULL);
dispatch_async(addOrUpdateEntriesQueue, ^{
NSManagedObjectContext *journalDataMOC = [[NSManagedObjectContext alloc] init];
[journalDataMOC setPersistentStoreCoordinator:journalDataPSC];
//Some code to get me an entry on this context
entry.message = [self contentForNoteWithEDML:note.content];
entry.dataLastModified = [NSDate date];
[entry.managedObjectContext save:nil];
[[NSNotificationCenter defaultCenter] removeObserver:[AppDelegate applicationDelegate].coreDataManager];
dispatch_async(dispatch_get_main_queue(), ^{
NSError *error;
if (![[self fetchedResultsController] performFetch:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
}
[self.tableView reloadData];
});
});
dispatch_release(addOrUpdateEntriesQueue);
백그라운드 스레드 또는 수동 생성 된 컨텍스트에 하위 컨텍스트를 사용하고 있습니까? 변경 사항이 주 컨텍스트로 전달되지 않는 것처럼 보입니다. –
수동으로 생성 된 컨텍스트를 사용하고 있습니다. 이 코드가 작동하는 방법에 대한 코드를 더 게시 할 것입니다. – Andrew