您可以在運行時修改Core Data模型嗎?是的,但是,它可能無法按照您希望的方式工作。
核心數據的API可以在運行時構建或修改數據模型的每個細節。 Xcode的模型編輯器很方便,但是如果你願意,你可以跳過它並用代碼完成所有的事情。例如,NSEntityDescription
的properties
屬性(它涵蓋了屬性和關係)是可寫的。您可以創建一個新的NSAttributeDescription
並更新實體的屬性以包含它。 Bang,你剛剛給實體添加了一個新的屬性。同樣,NSManagedObjectModel
的entities
屬性是可寫的,因此您可以創建一個新的NSEntityDescription
並將其添加到模型中。這給你一個新的實體,在運行時創建。
但,這是一個很大的一個:您可以在加載數據存儲這個之前只能做。一旦你加載你的持久化存儲,改變模型會拋出一個異常。當Core Data加載持久性存儲時,它將模型文件與存儲文件中使用的模型進行比較。他們必須匹配,並且您無法在加載商店後做任何事情來改變這一事實。一旦你加載商店,模型是固定的。更重要的是,即使您在加載持久性存儲之前修改模型,您也只能加載與當前版本的模型相匹配的持久性存儲 - 除非您也編寫代碼將持久存儲遷移到新模式。這很難取決於變化的性質。至少在加載先前保存的數據之前,您需要進行任何更改,然後安排進行模型遷移以更新持久性存儲以使用新模型。
使用核心數據時,模型(模式)和數據分開存儲並在商店加載時進行匹配。這不是SQLite如何在內部工作,而是核心數據強制執行的方式。
是否要修改Core Data使用的數據模型或其他內容?你說「數據庫」這聽起來像你的意思是核心數據以外的東西,但目前尚不清楚。 – 2013-03-18 16:21:36
對不起,是的,我想修改核心數據模型 – user2181824 2013-03-26 15:49:39