Iphone核心数据:日期默认值为当前日期

Rup*_*ius 20 iphone xcode core-data

我正在使用核心数据.我有一个具有Date类型属性的实体.有没有办法将默认值设置为当前日期?(比如输入'CURRENTDATE'或属性的默认值?)

谢谢

Bil*_*son 35

您可以在模型中使用"now",但Core Data会在编译时评估它,而不是运行时.您将获得存储在模型默认值中的编译日期,这可能不是您想要的:

http://iphonedevelopment.blogspot.com/2009/07/core-data-default-dates-in-data-model.html

确保当前日期的默认属性值的最可靠方法是-awakeFromInsert在NSManagedObject子类中重写并在其中分配当前日期.

- (void) awakeFromInsert 
{
   [super awakeFromInsert];
   self.date = [NSDate date];
   // or [self setPrimitiveDate:[NSDate date]]; 
   // to avoid triggering KVO notifications

}
Run Code Online (Sandbox Code Playgroud)

注意:如果您正在使用嵌套的托管对象上下文(或UIManagedDocument),则上述操作将无法按预期工作.此建议仅适用于使用单个托管对象上下文时.

  • 这是不正确的,因为每次创建NSManagedObject时都会调用awakeForInsert.可以在不同的线程中创建不同的NSManagedObject,同时它们表示相同的CoreData实体. (2认同)
  • 我相信你被方法名称误导了.从文档中:`awakeFromInsert:当接收器首次插入***托管对象上下文时由Core Data框架自动调用***.在网上搜索更多内容,我也发现这个链接正在讨论这个问题,当NSManagedObject首次插入上下文而不是商店时调用awakeFromInsert:http://www.mikeabdullah.net/an--awakefrominsert-gotcha.html (2认同)