2013-02-22 74 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