将 NSDate 的默认值设置为今天

Posted

技术标签:

【中文标题】将 NSDate 的默认值设置为今天【英文标题】:Setting Default Value of NSDate to Today 【发布时间】:2010-08-13 11:08:53 【问题描述】:

在我的核心数据模型中,我有一个 NSDate 属性,用户可以更改它,它是可选的。 我想将此属性的默认值设置为今天,我在核心数据模型中看不到这样做的方法,所以我将 NSManangedObject 子类化并将此代码添加到实现文件中。

- (NSDate *)date 
    return [NSDate date];

这似乎有效,但是日期总是今天的日期,即使用户更改它,它也会回到今天。如果一个对象是昨天创建的,它会将日期更改为今天,因此所有对象的日期都是今天。

我该如何解决这个问题,用户仍然可以更改默认日期吗?

【问题讨论】:

【参考方案1】:

“日期”也是属性的名称吗?如果是这样,那么您的代码将始终返回当前日期,因为您将覆盖属性方法。

要为属性设置自定义默认值,您可以覆盖 awakeFromInsert 方法。在该方法中,将属性值设置为 [NSDate date]。有关此方法的说明,请参阅 NSManagedObject 的文档。

【讨论】:

谢谢,比我想象的要容易得多! @shoumikhin 虽然此评论确实有效,但另一个答案也有效,因此两个答案都是正确的,所以我不会在 2 年后改变我的选择,而是将其保留为原始答案。 -awakeFromInsert 可能会被多次调用,因为它是在将对象插入到上下文中时调用的。【参考方案2】:

您可以将模型内部的默认值设置为“TODAY”或“NOW”,它会在您创建该实体的实例时自动设置。

【讨论】:

啊,这是一个不错的小技巧。我认为它不会接受 NSDate 的默认字段中的字符串。谢谢(新的正确答案)! 我注意到在 iPhone(未在 Mac 上测试)上,“今天”或“现在”评估为编译日期,而不是运行日期。 iphonedevelopment.blogspot.com/2009/07/… 似乎支持这一点。当我看到你的评论时,我在想“真棒”,但我注意到它不像我预期的那样工作。 我尝试在该字段中添加日期字符串(即“2012 年 10 月 12 日”),但没有成功。谢谢你的提示。巧妙的把戏。 @BrentPriddy 是正确的。这是编译时间日期,而不是运行时间日期。你可能应该改变答案,或者至少说出来,以免混淆其他人。

以上是关于将 NSDate 的默认值设置为今天的主要内容,如果未能解决你的问题,请参考以下文章

如何将列的默认值设置为今天的日期? [复制]

如何将今天设置为我的日期选择器默认值?

Datepicker 将今天的日期设置为默认值

无法将路径“stats”的默认值设置为猫鼬模式实例

将日期输入类型默认值设置为 Today、Tomorrow、Anydate?

如何使用 XML 在 SQL 中将列默认值设置为今天的日期