iOS核心数据属性(列)的默认值(以编程方式)

iOS核心数据属性(列)的默认值(以编程方式),ios,objective-c,core-data,Ios,Objective C,Core Data,当前方法 我使用inspector将属性的默认值直接设置到数据模型文件 问题 我有一个特定属性可以接受的值的枚举 我担心在后期维护它们可能会很困难 假设如果我决定更改枚举值,那么我必须手动转到检查器并更改它 因为我有很多基于枚举值的属性,所以这变得很困难 问题 如何以编程方式向核心数据属性添加默认值 是否有其他方法可以做到这一点,以便维护更容易 您可以在awakeFromInsert (请参见对象生命周期)在核心数据模型编辑器中,您可以使用核心数据提供的用于创建/内省托管对象模型的类以

当前方法

  • 我使用inspector将属性的默认值直接设置到数据模型文件
问题

  • 我有一个特定属性可以接受的值的枚举
  • 我担心在后期维护它们可能会很困难
  • 假设如果我决定更改枚举值,那么我必须手动转到检查器并更改它
  • 因为我有很多基于枚举值的属性,所以这变得很困难
问题

  • 如何以编程方式向核心数据属性添加默认值
  • 是否有其他方法可以做到这一点,以便维护更容易

您可以在
awakeFromInsert


(请参见对象生命周期)

在核心数据模型编辑器中,您可以使用核心数据提供的用于创建/内省托管对象模型的类以图形方式执行的所有操作。对于这个用例,您可以使用查找实体、其或访问器来查找您感兴趣的属性,并执行与核心数据模型编辑器相同的操作


你可能会发现这是做你想做的事情的最合适的方式。或者,正如@DimitryShevchenko所指出的,您可以在
NSManagedObject
subclass'方法中初始化值——您选择的方式可能取决于您的工作流或应用程序的其他要求。

谢谢,但我尝试使用
NSEntityDescription
但我得到了以下异常
nsinternalinconsistenception',原因:“无法修改不可变模型。
我在数据库启动后设置了默认值。我应该什么时候设置默认值?我在项目中使用了
UIManagedDocument
,我尝试在设置
UIManagedDocument persistentStoreOptions
之前设置默认值,但在db启动之前我肯定会遇到相同的错误是的,我在db启动之前尝试过。我在分配UIManagedDocument后立即设置默认值。我甚至在设置persistentStoreOptions之前就这么做了。我仍然收到相同的错误谢谢,但是在我的项目中有一个实体只包含一行,当用户第一次安装应用程序时,会插入一行。根据我的代码,当下一个版本的应用程序上线时,不会添加任何行,因此不会调用
awakeFromInsert
。因此,不会为新添加的属性设置默认值。如果没有添加任何行,为什么要关心默认值?我的意思是,应用程序将只包含1行数据(如静态数据)。此行将在首次安装应用程序时添加。当用户更新到更高版本时,应用程序将不会插入新行,因为bcuz已存在一行。问题出现了bcuz新属性的默认值不会被设置bcuz逻辑将在
awakeFromInsert
中,那么默认值是不相关的,听起来你需要更改现有数据中的一些值。你是对的,我是错的。默认值仅在插入新记录时生效,如果我没有明确提及该值。它对已创建的记录和添加了默认值的新列无效。谢谢!!