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

问题描述:

使用核心数据的Im。我有一个具有Date类型属性的实体。有没有一种方法可以将默认值设置为当前日期? (就像进入“的currentdate”什么的属性的默认值?)Iphone核心数据:日期默认值为当前日期

感谢

你可以在模型中使用的“现在”,但核心数据的计算结果,在编译时,不是运行。你会得到存储在你的模型默认编译的日期,这可能不是你想要的东西:

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 

} 

注意:如果你正在做使用嵌套的管理对象上下文(或UIManagedDocument)的,上面会不会达到预期效果。此建议仅适用于使用单个托管对象上下文的情况。

+2

这是不对的,因为每次创建NSManagedObject时都会调用awakeForInsert。不同的NSManagedObject可以在不同的线程中创建,而它们表示相同的CoreData实体。 – Kamchatka 2013-06-13 07:48:32

+0

在代表同一个实体的两个不同线程中创建一个托管对象将违反核心数据物理定律。肯定是一些应用程序逻辑错误的指标。做这样的事情不是推荐的做法。 – 2013-06-16 00:56:52

+0

我相信你可以。这是一个公平的用例:你可以在主线程上显示一个Core Data对象来显示(比如说一个“Photo”对象),然后在后台有一个工作线程从数据库加载同一个对象,应用一些图像处理,将照片保存回持久存储。此时,您将获得全局更改通知,并且主线程可以决定将更改合并到主线程托管对象上下文中。 – Kamchatka 2013-06-17 08:48:07