簡體   English   中英

從Integer 16到可轉換的核心數據遷移

[英]Core Data Migration from Integer 16 to Transformable

在我的應用程序中,我有一個帶有屬性value的核心數據實體。 我想在即將發布的版本中將此屬性的類型從Integer 16更改為Transformable

現在,在設置我的持久性存儲協調器時,我將以下內容作為選項:

let options: [NSString: Bool] = [
            NSMigratePersistentStoresAutomaticallyOption: true,
            NSInferMappingModelAutomaticallyOption: true]

try coordinator!.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: options) ...

現在,我已經創建了核心數據模型的第二個版本,其中包括對value屬性的更新,而沒有其他更改。 嘗試構建時,出現以下錯誤:

CoreData: error: -addPersistentStoreWithType:SQLite ... Persistent store migration failed, missing mapping model

進一步,這是:

Can't find or automatically infer mapping model for migration ... Source and destination attribute types are incompatible.

因此,顯然CoreData無法從Integer 16自動映射到Transformable嗎? 我該如何解決這個問題?

對於如何將現有的整數值轉換為二進制Blob並沒有明顯的規定,因此Core Data在這里拋出了麻煩,並說它不知道您想做什么。 將屬性轉換為其他數據類型需要您做更多的工作。

如果實際上是在轉換數據(例如,您希望新的二進制value以某種方式從舊的整value派生),則需要創建一個映射模型並以相對困難的方式進行遷移。 其中的一部分將涉及您進行整數到二進制的轉換。 這里有很多要了解的內容,因此我將為您推薦Apple的Core Data遷移指南以獲取更多信息。

但是,如果新的二進制value獨立於舊的整value -意味着新數據不是從舊數據派生的 ,而是它的完整替代品-您可以使事情變得簡單。 如果是這種情況,請不要重命名該屬性。 使用其他名稱, valueBlob或其他名稱創建一個新屬性,然后刪除value屬性。 自動輕量級遷移可以處理添加和刪除屬性,因此可以處理該更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM