天天看點

《Core Data應用開發實踐指南》一3.1 修改托管對象模型

本節書摘來自華章出版社《core data應用開發實踐指南》一書中的第3章,第3.1節,作者 (美)tim roadley,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視

在應用程式的進化過程中,其托管對象模型也可能需要改變。對于一些比較簡單的修改,諸如設定屬性的預設值、設定驗證規則、使用擷取請求模闆等,是可以直接實施的。而對于另外一些更為結構化的(structural)修改,則需先把持久化存儲區遷移到新的模型版本才行。假如沒有提供遷移資料所需的映射與設定,那麼應用程式就會崩潰。

請按下列步驟修改grocery dude,以引發模型不相容錯誤:

運作grocery dude,確定程式用現有模型建立持久化存儲區。你應該會在控制台日志裡看到successfully added store字樣。

在xcode界面裡選中model.xcdatamodeld。

添加名為measurement的新實體。

選中measurement實體,添加名為abc的屬性,并将其類型設為string。

重新運作應用程式,并觀察控制台輸出的日志。你将會看到圖3-1裡的這個錯誤,它應該算是core data開發中最為常見的錯誤之一。假如沒有發生該錯誤,請删除應用程式,并點選product>clean菜單項,然後從第1步開始再試一次。

《Core Data應用開發實踐指南》一3.1 修改托管對象模型

對于處在開發初期的應用程式來說,這種崩潰算不上什麼大問題,我們隻需把程式删了并重新運作一遍就好。删除之後,再次運作應用程式時,它會按照最新的模型來建立持久化存儲區。這樣一來,存儲區就可以和模型相相容了,于是應用程式也就不再崩潰了。但是,這樣做也會失去存儲區裡原有的資料。對于已經在app store上架的程式來說,這讓人無法接受。有好幾種辦法都可以遷移現有的持久化存儲區,而遷移路徑則是由變更的複雜程度以及是否使用icloud等因素來決定的。無論采用哪種遷移辦法,我們都必須首先熟悉“模型版本控制”(model versioning)。

請按下列步驟修改grocery dude,以便将模型恢複到修改前的狀态:

標明model.xcdatamodeld。

删除measurement實體。

重新運作應用程式,這次應該不會崩潰了。