2013-02-22 73 views
2

當前的方法默認值到核心數據屬性(列)爲iOS編程

  • 我使用檢查員直接設置屬性的缺省值的數據模型文件。

問題

  • 我有特定屬性的值可以取枚舉。
  • 我很擔心在後期維護它們可能會很困難。
  • 假設如果我決定更改枚舉值,那麼我將不得不手動去檢查器並更改它。
  • 因爲我有很多基於枚舉值的屬性,所以變得很困難。

問題

  • 我如何添加默認值到核心數據編程的屬性?
  • 有沒有其他辦法可以做到這一點,以便維護更容易?

回答

3

可以在awakeFromInsert

Related docs繼承您的NSManagedObject並設置爲默認值(見對象的生命週期

+0

謝謝,但在我的項目中有一個只包含1行的實體,當用戶第一次安裝應用程序時,會插入1行。根據我的代碼,當下一個版本的應用程序上線時,不會添加任何行,所以'awakeFromInsert'不會被調用。因此,新添加的屬性的默認值不會被設置。 – user1046037 2013-02-22 09:32:38

+0

好吧,如果沒有添加行,爲什麼你在乎默認值? – 2013-02-22 09:37:55

+0

我的意思是,應用程序只會包含1行數據(如靜態數據)。該行將在應用第一次安裝時添加。當用戶更新到更高版本時,應用程序不會插入新行,bcuz行已經存在。問題出現bcuz新屬性默認值不會被設置bcuz邏輯將會在'awakeFromInsert' – user1046037 2013-02-22 10:00:18

2

一切你可以,你可以用做核心數據模型編輯器圖形做核心數據提供了創建/內省管理對象模型的類。對於此用例,可以使用NSEntityDescription來查找實體,其propertiespropertiesByName訪問器,以找到您感興趣的屬性的NSAttributeDescription,並使用setDefaultValue:來執行核心數據模型編輯器所做的相同操作。

您可能會發現這是最適合您尋找的方法。或者,正如@DimitryShevchenko指出的那樣,您可以初始化NSManagedObject子類的awakeFromInsert方法中的值 - 您選擇哪種方式可能取決於您的工作流程或應用程序的其他要求。

+0

謝謝,但我嘗試使用'NSEntityDescription',但我得到了以下異常'NSInternalInconsistencyException',原因:'無法修改不可變的模型。「我在數據庫啓動後設置了默認值。我應該在什麼時候設置默認值? – user1046037 2013-02-22 08:46:54

+0

我已經在我的項目中使用了'UIManagedDocument',並且在'UIManagedDocument persistentStoreOptions'設置之前嘗試設置默認值,但是我得到了相同的錯誤 – user1046037 2013-02-22 09:05:58

+0

在db啓動之前肯定是 – 2013-02-22 09:08:50