2011-06-16 61 views

回答

8

這是在蘋果的Core Data Utility Tutorial"Creating the Managed Object Model"下解釋的。一般而言,一旦您有管理對象模型的引用,就可以使用NSEntityDescriptionNSAttributeDescription類來自定義管理對象模型中的實體及其屬性。

但是,請注意,在大多數情況下,一旦您修改託管對象模型,它將不再與現有的持久性數據存儲兼容,這意味着您將不得不將數據從舊持久性存儲遷移到新持久性存儲。這絕對不是一個不容小視的努力。

當然,正如評論中提到的,Core Data也可以自動遷移數據,這個過程被稱爲輕量級遷移。在一般情況下,雖然,這樣做

核心數據需要能夠找到 源和目標管理對象 車型本身在運行時。 (核心數據 搜索由 NSBundleallBundlesallFrameworks方法返回的束。),那麼它必須 分析模式更改 持久實體和屬性和 產生推斷的映射模型。 對於核心數據能夠做到這一點, 的變化必須符合一個明顯的 遷移模式,例如:

  • 簡單增加了一個新的屬性
  • 非可選屬性成爲可選
  • 可選屬性成爲非可選,以及定義了默認值

是否適合這個您的使用情況下,還是要允許用戶如何改變託管對象模型的方式使輕量級遷移變得不可能?

在任何情況下,我強烈建議您在嘗試允許用戶修改Core Data模型之前通讀以下文檔。

+0

對於模型核心數據的簡單變異將自動推斷遷移映射,甚至可以將用戶修改的模型存儲在磁盤上,因爲NSManagedObjectModel實現了NSCoding。 – ImHuntingWabbits 2011-06-17 07:17:54

+0

@matchi這回答你的問題? – 2011-07-20 22:32:31

1

NSManagedObjectModel reference page ...

管理對象模型編輯 ,直到它們被對象圖 管理器使用。不過,一旦正在使用的模型 ,它不能被改變......

我「這絕對是一個先進的核心數據主題(而核心數據本身已經是一個相當先進的話題),不要輕易進行。如果讓用戶修改模型,我不確定已存儲在數據存儲區中的任何數據是否有用(甚至可用)。