2012-06-28 49 views
0

我對iOS 5併發選項有點困惑。通常,以舊的方式,您必須使用mergeChanges和通知手動跟蹤從一個上下文到另一個上下文的更改。但如果我的理解是正確的,使用新的選項,你可以有一個帶有子上下文的NSMainQueueConcurrencyType。因此,無論您何時保存子上下文,都會自動推送更改並與父項合併,而無需進行任何其他手動工作,對吧?將Core Data中的更改從一個上下文合併到另一個上下文

如果是這樣,我遇到了問題。假設我有一個由主要上下文獲取的對象。然後我改變這些對象的一些屬性,但我還沒有保存。然後,在父設置爲mainContext的NSPrivateQueueConcurrencyType上,我執行一次提取來檢索剛在主要上下文中修改的對象。獲取的對象是否會反映我剛纔對主線程中的屬性所做的更改?

回答

2

獲取的對象會反映我剛剛對主線程屬性所做的更改嗎?

否。只有在-refreshObject:mergeChanges:YES之後,更改纔會反映在子上下文中。

就像思考的食物一樣,UIManagedDocument也是這樣做的。它爲主線程創建一個子上下文,並使用NSPrivateQueueConcurrencyType作爲父項的上下文。現在,在主線程上進行的所有更新都將自動傳播到父上下文。所以當文檔保存在後臺時,所有的更改都會在那裏。

+0

爲什麼這個傢伙說當你想讓上下文知道可以將對象變成故障釋放內存時應該使用refreshObject? http://stackoverflow.com/a/3984681/458960 – Snowman

+0

您可以使用-refreshObject:mergeChanges:NO來修剪對象圖。那就是你明確地告訴你,你想放棄你在當前上下文中對該對象所做的任何更改。 – svena

+0

等待我在哪裏調用refreshObject?在父線程(掛起更改的位置)還是子線程上? – Snowman

相關問題