使用KVC在核心数据中设置日期

时间:2015-11-13 00:56:46

标签: objective-c nsdate kvc

这让我有点神秘。 出于某种原因,我可以通过属性设置日期,但尝试使用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设置日期。

非常感谢

1 个答案:

答案 0 :(得分:1)

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