2010-06-22 118 views
0

我有一個問題,從核心數據模型的v1到v2映射以下情況。CoreData自定義映射模型

在模型的v1中,我有一個名爲book的實體,其中有一個屬性author。在那裏我保存了作者的名字和姓氏,甚至保存了幾位作者的姓名。我知道設計很差,但事實就是這樣。

在模型的第2版中,我做得更好,並添加了具有屬性firstname和lastname的實體作者以及與book的關係。有沒有人知道我如何以這種方式定製映射模型,它調用一個函數(它返回作者的數量和分隔的第一個和最後一個名稱)並創建與該函數的輸出有關的新實體?

感謝 b00tsy

回答

2

您首先創建源模型和目標模型之間的映射模型。從那裏你要選擇你想要處理這個分割的映射模型中的對象。在映射模型編輯器的右側,您會看到可以命名爲NSEntityMigrationPolicy的類的位置。通過在此添加自定義映射策略類,您可以告知遷移使用您的代碼而不是標準代碼。

從那裏,創建類,並有它的子類NSEntityMigrationPolicy。該類內部覆蓋方法-createDestinationInstancesForSourceInstance: entityMapping: manager: error:。此方法將在每個對象中調用一次,您有責任創建目標對象並將所有屬性從源複製到目標。作爲該副本的一部分,您可以按照您認爲合適的邏輯將名稱分爲名字和姓氏。在該方法結束時,請確保您撥打-associateSourceInstance: withDestinationInstance: forEntityMapping:,以便NSMigrationManager知道新創建的目標對象,其餘遷移將正常工作。

注意:您不需要重寫任何與關係相關的方法,除非您還需要爲這些方法編寫自定義代碼。

這就是它的全部。

+0

謝謝Marcus。設置缺少的NSEntityMigrationPolicy類是我需要的缺失鏈接。連同你的帖子:http://www.mactech.com/articles/mactech/Vol.25/25.03/CoreDataVersioning/index.html我做到了!順便說一句。我真的很喜歡你的博客cimgf.com ... – b00tsy 2010-06-22 19:25:11

0

Core Data Model Versioning and Data Migration Programming Guide告訴您如何做遷移的一部分。

至於名字/姓氏的分離,您可能會遇到問題。你在哪裏分開名字/姓氏?按空格?那麼「德爾託雷斯」等呢?那些使用他們的「中間名」的作者呢?

這是一個艱難的,你應該考慮的。

+0

嗨喬希, 感謝您的回答。我有你提到的問題,我已經閱讀了遷移指南,但是我還沒有找到答案,關於如何將這樣的功能集成到映射模型中。是否有可能,或者是否需要在遷移後通過方法修改所有實體?例如我只是讓映射模型執行通常的工作,之後我將每個作者實體並手動分割... – b00tsy 2010-06-22 15:24:23

+0

遷移指南的自定義遷移過程部分回答了此一般問題。您需要更具體地瞭解您遇到的問題。 – 2010-06-22 16:27:43