2012-06-03 42 views
2

看起來,基於隊列的新MOC與iOS 5中引入的嵌套MOC一起用作更簡單,更乾淨的併發模型,所以我現在很開心地使用它。但是有幾件事情對我來說並不清楚:如何讓孩子MOC看到父母MOC的變化以及如何解決它們之間的衝突?

  1. 孩子MOC是否自動拉取母親MOC的變化?還是我仍然需要手動協調它們?如果是後者,如何手動刷新孩子以納入父母的變化? (我知道事情是如何以相反的方式進行的 - 父母MOC在兒童保存時從兒童MOC獲得變化。)
  2. 如果孩子的變化和孩子的變化之間存在衝突,保存孩子MOC會發生什麼?家長嗎? mergePolicy是否也負責解決兒童商務部與家長商務部之間的衝突?

回答

5
  1. 是,也不是,這取決於你的定義 「自動拉parentMOCs的變化。」如果你的意思是,孩子下一次獲取,它會得到更新的數據,然後是的。如果你的意思是對象會自動改變,那麼不會。原因是MOC是一個暫存器,如果不改變它,它不會改變。

  2. 是的,如果您要對來自多個位置的相同對象/關係進行更改,則必須解決合併衝突。這是一個複雜的問題,在SO回答中不能得到充分的回答。你應該真的閱讀核心數據編程指南,特別是關於變更管理的章節。

編輯

  1. 說我拿着對象的兒童MOC和關係的B父MOC添加到。如果我訪問A.B,我會得到什麼?零?我應該怎麼做 我想在孩子MOC中看到A.B。使用refreshObject:mergeChanges:至 刷新A,或使用objectWithID:再次獲取A?有沒有什麼辦法讓 刷新整個孩子MOC?我在 兒童MOC中有一個非常複雜的對象網絡,我不想(或不能)每個對象一個一個地刷新/重新提取。

當物體從A到孩子MOC看,你不會看到在父MOC的變化,直到你從孩子MOC重新提取。如果您想查看父項中的內容,可以通過MOC上的另一次獲取或通過任何方法從商店中獲取特定對象。但是,我必須強調,您需要閱讀有關每個提取的文檔,因爲它們可能有副作用。確切的答案取決於您選擇哪種方法。

通常,如果您正在進行持續更改,您希望對子級進行更改,並將其推送給父級,或處理DidChange通知以使更改顯示爲「自動」。

  1. mergePolicy在這裏工作嗎?

是的。

再一次,我可以給你的最佳答案是指向「核心數據編程指南」。要特別注意這兩個部分:

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdFetching.html#//apple_ref/doc/uid/TP40002484-SW1

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdChangeManagement.html#//apple_ref/doc/uid/TP30001201-CJBDBHCB

+0

1.說我拿着對象的兒童MOC和關係的B父MOC添加到。如果我訪問A.B,我會得到什麼?零?如果我想在孩子MOC中看到A.B,我該怎麼辦?使用'refreshObject:mergeChanges:'來刷新A,或使用'objectWithID:'來再次獲取A?有什麼方法可以刷新整個兒童MOC?我在孩子MOC中有一個非常複雜的對象網絡,我不想(或者不能)逐個刷新/重新獲取每個對象。 – an0

+0

2.'mergePolicy'在這裏工作嗎? – an0

相關問題