2009-08-21 74 views
2

我有一個基於默認xcode模板的核心數據應用程序,我有用於查看數據的主UI,然後我有一個下載/插入/編輯數據的後臺線程。可可核心數據 - 背景線程

我覺得應用程序啓動時我可以創建兩個NSManagedObjectContext,一個應用程序讀取,另一個在後臺線程中寫入,然後寫完後它會調用performSelectorOnMainThread來同步兩個NSManagedObjectContext對象。

我對可可相當陌生,想知道是否有人可以確認這應該工作,並且沒有人知道關於此的示例或討論,因爲我無法使同步正常工作。

回答

1

您是否手動創建後臺線程?如果是的話,我會推薦在NSURLConnection中使用Cocoa的委託模式來做後臺的實際下載和前臺數據的處理。

如果您覺得仍然需要手動創建線程,請閱讀核心數據編程指南的Multi-Threading in Core Data部分以獲取更多信息。

+0

感謝您的迴應,我手動創建線程,因爲我需要下載數據,處理數據,根據條件下載更多的數據,然後將數據插入核心數據,而用戶瀏覽已存儲的數據。我已經讀過那個蘋果文檔,但是我錯過了關於有兩個持續性商店協調員的問題,我會再試一次。 – Craig 2009-08-21 21:49:00

+0

我爲每個線程創建了一個單獨的託管對象上下文,並共享一個持久性存儲協調器,但是我無法在後臺線程完成運行後重新加載或合併主要託管對象中的數據,我會認爲必須有一個簡單的方法來告訴它重新加載主線程,但我似乎無法找到它。 – Craig 2009-08-21 22:16:33

+0

您可以使用名爲-performSelectorOnMainThread:withObject:waitUntilDone的NSObject方法調用主線程上的方法:同樣,我會推薦使用NSURLConnection的異步方法,而不是通過您自己的線程同步執行。 – 2009-08-22 04:17:15

3

你想看看-[NSManagedObjectContext mergeChangesFromContextDidSaveNotification:]。註冊工作線程的託管對象上下文中的更改通知。在通知回調中,調用您的主線程的託管對象上下文的mergeChangesFromContextDidSaveNotification。確保您在主線程上調用此方法(更改通知將在工作線程上發佈)。