【问题标题】:Setting date in core data with KVC使用 KVC 在核心数据中设置日期
【发布时间】:2015-11-13 00:56:45
【问题描述】:

这让我有点迷惑。 出于某种原因,我可以通过属性设置日期,但尝试使用 KVC 以相同的方式设置日期会导致错误。

我正在尝试使我的代码更通用,所以我真的希望能够通过 KVC 设置我的日期,因为我的 NSManagedObject 定义如下所示。 这不是我的项目,而且是一个非常大的项目,所以我需要在现有的范围内工作。

我读过这篇文章,但它并没有完全解决这个特定问题......

Why is an NSDate in a Core Data managed Object converted to NSTimeInterval?

在核心数据建模器中...

NSManagedObject SomeClass   
   updateDate  Date

在代码中...

NSManagedObject SomeClass
   @property (nonatomic) NSTimeInterval updateDate

所以在一个方法中,我已经看到通过属性设置时执行此操作的代码,它工作得很好,但不是通用的。

someClass.updateDate = [NSDate date] timeIntervalSinceReferenceDate

我不能通过 KVC 做到这一点,因为 setValue: 需要一个 ID,因此它会失败并出现此编译时错误“将 NSTimeInterval 发送到不兼容类型 'id_Nullable'的参数”'通过KVC完成

[someClass setValue:[NSDate date].timeIntervalSinceReferenceDate forKey:@"updateDate"];

解决此问题的建议,以便我可以使用 KVC 设置日期。

非常感谢

【问题讨论】:

  • 如果您将 NSNumber 传递给 setValue:forKey:,如果该属性是原始类型,则会自动取消装箱。所以你应该可以做到[someClass setValue:@([[NSDate date] timeIntervalSince1970]) forKey:@"updateDate"]
  • 我知道,不过,我想知道为什么你不只是将该属性设为 NSDate。 Core Data 知道如何处理得很好。
  • 这是个好问题。我们的团队是由外部开发人员交给应用程序的,此时我们正在努力向前推进,就像我很想重构应用程序中的很多东西一样。经常这样啊。无论如何,如果您将您的第一个回复作为答案而不是评论发布,我可以感谢您的回答。
  • 回复:重构。去过那里,讨厌那个! :)

标签: objective-c nsdate kvc


【解决方案1】:

如果您将 NSNumber 传递给 setValue:forKey:,如果该属性是原始类型,它将自动取消装箱。所以你应该可以做到[someClass setValue:@([[NSDate date] timeIntervalSince1970]) forKey:@"updateDate"]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    相关资源
    最近更新 更多