我成功地添加和更新第二個線程上的核心數據中的記錄沒有問題。iOS核心數據 - 刪除沒有反映,直到應用程序重新啓動
但是,刪除似乎不會生效,直到我停止並重新啓動應用程序。所以刪除顯然是在一定程度上。我在加載tableview之前讀取數據,並且在刪除操作時不做任何不同的操作。
我正在使用的代碼是
....fetch records....
BOOL deleteGem = FALSE;
if ([[attributeDict objectForKey:@"headline"] hasPrefix:@"VOID"])
deleteGem = TRUE;
if ([mutableFetchResults count] == 0) {
// not there so create a new one
if (!deleteGem) {
// so create a new one unless it needs deleting
gem = (Gem *)[NSEntityDescription insertNewObjectForEntityForName:@"Gem" inManagedObjectContext:managedObjectContext];
[gem setID:[attributeDict objectForKey:@"ID"]];
}
} else {
// already exists so either get it and then update or delete it
gem = [mutableFetchResults objectAtIndex:0];
if (deleteGem) {
// delete it if required
[managedObjectContext deleteObject:gem];
gemDeletes ++;
}
}
.....
後來我有一個方法來保存包括任何更新:
NSError *error;
if (![self.managedObjectContext save:&error]) {
....
熱烈歡迎任何想法...
編輯 - 根據@ TechZen的回答完整回答..
在viewDidUnload
[[NSNotificationCenter defaultCenter] removeObserver:self name:NSManagedObjectContextDidSaveNotification object:nil];
處理在主線程中更新註冊二號線的更新通知在viewDidLoad中
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleSaveNotification:) name:NSManagedObjectContextDidSaveNotification object:nil];
註銷的通知(在新方法視圖控制器)
-(void)handleSaveNotification:(NSNotification *)aNotification {
[managedObjectContext mergeChangesFromContextDidSaveNotification:aNotification];
}
好吧,讓我感到困惑。你是從coreData直接在tableView中顯示數據,還是在NSArray/NSDictionary中緩衝它?如果你正在緩衝,你是從NSArray/NSDictionary中刪除項目嗎? –
不,我正在緩衝數組,但我刷新了這一點,並且對插入和更新工作正常。 – Chris