2017-01-23 34 views
0

我正在創建一個新版本的應用程序。我不希望保留任何現有的核心數據數據或模型,因此我認爲最簡單的方法是對現有數據進行旁觀並創建一個新的,不同的名稱存儲庫。我改變了文件MyApp.xcdatamodeldMyAppV2.xcdatamodeld而行的名稱核心數據重命名失敗加載NSManagedObjectModel

let container = NSPersistentContainer(name: "MyApp")

let container = NSPersistentContainer(name: "MyAppV2")

現在,當我跑,我得到以下錯誤:Failed to load NSManagedObjectModel with URL 'file:///var/containers/Bundle/Application/.../MyApp.app/MyAppV2.momd/'

我正在使用iOS 10.

我是goi對這種錯誤的方式或有什麼我需要改變?

非常感謝。

+0

你是從xcode設置模型版本嗎? –

+0

我不這麼認爲。我會怎麼做?我需要嗎?我不希望從舊應用程序遷移任何內容。這是從iOS空白項目模板與Core Data的完全重寫。 –

+1

模型文件是否包含在項目中?你檢查了構建階段以查看它是否被複制?你是否在使用框架 - 如果是這樣的話,模型不在NSPersistentContainer看起來的主包中。您可以嘗試從項目中將其刪除並將其添加回去,或者手動傳遞指向模型的指針。 –

回答

-1

最簡單的方法不是重命名任何東西。只需將模型更改爲您想要的模型,並且任何現有的數據庫都將不兼容,因此應該在用戶第一次運行新版本的應用程序時被吹走。

如果您想重新命名,那麼最好的辦法是完全從您的應用程序中刪除舊商店,然後添加一個新的名稱。 MyApp.xcdatamodeld實際上不是一個文件,而是一個包含幾個嵌套文件夾和文件的包,因此它不會輕鬆重命名。

+0

核心數據不會自動吹走現有數據,您必須在檢測到模型不匹配時編寫代碼。 –

+0

應該不意味着自動。而且無論如何您都需要該代碼,對於具有損壞或其他不兼容數據庫的用戶,沒有其他恢復方法。 – trapper

+0

在這種情況下,您的答案更有意義。我會扭轉我的投票。我想知道包含檢測不匹配和刪除數據庫的一些示例代碼會有幫助嗎? –