2013-01-08 194 views
10

我發現沒有什麼改變managedObjects relationshipCoreData遷移 - 刪除

我最初coredata模型deletion rule的情況下約migration rules包含一個實體的關係關係的規則。這種關係的刪除規則是cascade。我不得不改變這種行爲Nullify

因此我創建了一個new version of my coredata model但沒有任何輕量級遷移,它仍然有效。因此,如果我應該添加模型的新版本或者如果更改刪除規則(例如,從cascadenullify)不影響/不需要任何遷移,我就應該做出決定。

有什麼建議嗎?

+0

沒有輕量級遷移?所以在添加持久性存儲時,您不使用「NSMigratePersistentStoresAutomaticallyOption」或「NSInferMappingModelAutomaticallyOption」? –

+0

不,我用下面創建我的商店:協調addPersistentStoreWithType:NSSQLiteStoreType 配置:無 網址:storeURL 選項:無 錯誤:錯誤] – Alexander

回答

16

刪除規則指定運行時的核心數據的行爲:如果一個對象被刪除,其他關係可能被設置爲NULL,或者相關對象也可能被刪除。

因此,我認爲刪除規則僅存儲在覈心數據模型中,但不存儲在持久存儲文件中。

爲了驗證這一點,我已經從2個核心數據模型創建了2個存儲文件,它們具有相同的實體,但具有不同的刪除規則。在持久性商店metadata字典中的NSStoreModelVersionHashes是相同的。

事實上,兩個SQLite文件都與「Z_METADATA」表中唯一的例外是「Z_UUID」,這是持久性存儲文件的NSStoreUUID

另外,如果加載的商店的版本哈希與模型中的哈希不同,則addPersistentStoreWithType:...將會失敗。

更改刪除規則應該不成問題。

+0

這正是我經歷 - 相同的哈希值。我只是在擺弄,因爲在蘋果文檔中,我發現deleteRules應該是相關的:[...]對於每個實體中的每個屬性,以下屬性必須相同:name,isOptional,isTransient, isReadOnly, attributeType和關係destinationEntity,minCount, maxCount,deleteRule和inverseRelationship [...]!所以你不會爲這個改變創建一個新版本嗎?我沒有看到任何新的優勢...... – Alexander

+0

@亞歷山大:我必須承認我沒有查閱文檔(你能給我的位置?),我只是按照描述測試過。你已經測試過'addPersistentStoreWithType:'工作,所以我沒有看到問題。 –

+0

這裏你去(底部的頁面8):https://developer.apple.com/library/mac/documentation//Cocoa/Conceptual/CoreDataVersioning/CoreDataVersioning.pdf – Alexander