2011-12-16 78 views
0

我正在嘗試爲核心數據做一些多線程同步。但在情況下,當我必須做保存主線程:核心數據 - 是否有可能避免在主線程中保存managedObjectContext?

- (void)importerDidSave:(NSNotification *)saveNotification { 
    NSLog(@"MERGE in destination controller"); 
    if ([NSThread isMainThread]) { 
    AppDelegate *delegate = (AppDelegate *)[[NSApplication sharedApplication] delegate]; 

     [[delegate managedObjectContext] mergeChangesFromContextDidSaveNotification:saveNotification]; 
    } else { 
     [self performSelectorOnMainThread:@selector(importerDidSave:) withObject:saveNotification waitUntilDone:NO]; 
    } 
} 

我有一段時間凍結主線程(在這種情況下,我有旋)。所有接口視圖都連接到連接到AppDelegate moc的陣列控制器。 因此,關於設計的一些問題:

  1. 我可以避開主界面上的凍結和合並主線程之外管理對象上下文?
  2. 是否可以避免,如果我將所有數組連接到另一個managedobjectcontext?我如何避免問題,當創建的上下文沒有內部變化時,它會在創建此對象後合併?

任何幫助將不勝感激...

回答

0

你永遠需要更新您的控制器綁定到上下文,因爲這是UI的東西,你需要做的是在主線。

我有點困惑,爲什麼你按照你的方式編碼。這對我來說似乎更簡單:

- (void)importerDidSave:(NSNotification *)saveNotification { 

    NSLog(@"MERGE in destination controller"); 

    AppDelegate *delegate = (AppDelegate *)[[NSApplication sharedApplication] delegate]; 

    [[delegate managedObjectContext] performSelectorOnMainThread:@selector(mergeChangesFromContextDidSaveNotification:) withObject:saveNotification waitUntilDone:NO]; 

} 

是否使用該代碼可以改善性能?

+0

它是一個相同的代碼;) – user170317 2011-12-16 21:24:11