2009-12-08 58 views
1

我在創造幾百個管理對象一個單獨的線程被管理對象的情況下,當它存,並保存通知傳遞給主線程和我的其他方面(主線程)更新:mergeChangesFromContextDidSaveNotification幾乎回吐一分鐘

在線程

[ApplicationDelegate performSelectorOnMainThread:@selector(managedObjectContextDidSave:) 
             withObject:notification 
            waitUntilDone:NO]; 

的問題是,合併走的是一條很長的時間,有時是40-50秒,這是鎖定了主線程& UI。爲什麼需要花費這麼長的時間才能更新?

編輯

這似乎如果有是當前顯示將由合併影響數據讀取的結果控制器纔會發生。有任何想法嗎?

回答

3

我假設你的NSFetchedResultsController有一個NSFetchedResultsControllerDelegate,它必須處理大量的更新作爲合併的結果。這些更新會導致表格中的大量活動,這可能會導致滯後。

什麼你可能需要做的就是創建一個包裝方法,在主線程中調用時暫時將刪除NSFetchedResultsController委託,然後調用managedObjectContextDidSave,然後刷新了表,然後恢復上NSFetchedResultsControllerDelegate

+0

感謝您的答覆。是的,我已經縮小到討厭的代表了!我倒是那種假設所有的FRC會做的是執行另一個獲取並刷新表視圖,然後它得到了通知,但看來它確實比多很多,因此爲什麼需要這麼長!其實我已經完全斷開所有的FRC的代表爲我的實現並不需要任何超過簡單的重裝時,它獲得的通知。我只是聽聽上下文的「更改」通知和讀取/重新加載。感謝您的回答! –

相關問題