我正在使用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为Core Data Date 属性的标量属性表示自参考日期2001年1月1日以来的时间(以秒为单位)。Core Data生成的访问器方法在NSTimeInterval和之间透明地转换NSDate。
NSTimeInterval
Date
NSDate
因此,您可以使用标量访问器 设置 值
obj.dateLastSynced = date.timeIntervalSinceReferenceDate
您 检索 与价值
let date = NSDate(timeIntervalSinceReferenceDate: obj.dateLastSynced)
这提供了与键值编码方法相同的结果
// Set: obj.setValueForKey(date, "dateLastSynced") // Get: let date = obj.valueForKey("dateLastSynced")