我正在使用NSManagedObject子类中的setValueForKey设置NSTimeInterval,该值被正确设置,并且在使用valueForKey检索该值时也是正确的,但是,如果直接使用访问器,它将返回不正确的值。这是演示该问题的代码示例

let date = NSDate() //NSTimeIntervalSince1970 = 1447054145.15281
self.setValueForKey(date, "dateLastSynced")

self.valueForKey("dateLastSynced") //= 1447054145.15281
self.dateLastSynced // !!ERROR Incorrect value = 468746945.152815


奇怪的是,如果将dateLastSynced转换为NSDate,则一切正常。

有什么想法吗?

最佳答案

核心数据NSTimeInterval的类型为Date的标量属性
属性表示自参考日期以来的时间(以秒为单位)
2001年1月1日。CoreData透明地生成访问器方法
NSTimeIntervalNSDate之间转换。

因此,您可以使用标量访问器设置一个值

obj.dateLastSynced = date.timeIntervalSinceReferenceDate


然后使用

let date = NSDate(timeIntervalSinceReferenceDate: obj.dateLastSynced)


这提供了与键值编码方法相同的结果

// Set:
obj.setValueForKey(date, "dateLastSynced")
// Get:
let date = obj.valueForKey("dateLastSynced")

07-24 12:36