2011-06-22 65 views
1

我成功地添加和更新第二個線程上的核心數據中的記錄沒有問題。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]; 
} 
+0

好吧,讓我感到困惑。你是從coreData直接在tableView中顯示數據,還是在NSArray/NSDictionary中緩衝它?如果你正在緩衝,你是從NSArray/NSDictionary中刪除項目嗎? –

+0

不,我正在緩衝數組,但我刷新了這一點,並且對插入和更新工作正常。 – Chris

回答

3

如果要在後臺上下文中進行的更改顯示在前臺上下文中,則必須將後臺上下文與前臺上下文合併。

+0

完美!請參閱上述編輯。 – Chris

相關問題