核心数据NSTimeInterval使用访问器直接是bug [英] Core Data NSTimeInterval using an accessor directly is buggy
问题描述
我在NSManagedObject子类中使用setValueForKey设置NSTimeInterval,该值设置正确,并且在使用valueForKey检索时也是正确的,但是,如果直接使用访问器,则返回一个不正确的值。这是一个演示问题的代码示例
let date = NSDate()// NSTimeIntervalSince1970 = 1447054145.15281
self。 setValueForKey(date,dateLastSynced)
self.valueForKey(dateLastSynced)// = 1447054145.15281
self.dateLastSynced // !! ERROR不正确的值= 468746945.152815
奇怪的是,如果dateLastSynced转换为NSDate,一切都完美。
有关发生什么的任何想法?
类型 NSTimeInterval
表示核心数据日期
属性表示自引用日期以来的时间b Jan 1,2001. Core Data生成访问器方法透明
在 NSTimeInterval
和 NSDate
之间转换。 / p>
因此,您可以使用标量访问器
设置值obj.dateLastSynced = date.timeIntervalSinceReferenceDate
并且检索
let date = NSDate(timeIntervalSinceReferenceDate:obj.dateLastSynced)
这会产生与键值编码方法相同的结果。
// Set:
obj.setValueForKey(date,dateLastSynced)
// Get:
let date = obj.valueForKey(dateLastSynced)
I'm setting an NSTimeInterval using setValueForKey within an NSManagedObject Subclass, the value gets set correctly, and is also correct when it is retrieved using valueForKey, however, if an accessor is used directly, it returns an incorrect value. Here is a code sample that demonstrates the issue
let date = NSDate() //NSTimeIntervalSince1970 = 1447054145.15281
self.setValueForKey(date, "dateLastSynced")
self.valueForKey("dateLastSynced") //= 1447054145.15281
self.dateLastSynced // !!ERROR Incorrect value = 468746945.152815
Strangely enough, if the dateLastSynced is converted to an NSDate, everything works perfectly.
Any ideas on whats happening?
A scalar property of type NSTimeInterval
for a Core Data Date
property represents the time in seconds since the reference date
Jan 1, 2001. The Core Data generated accessor methods transparently
convert between NSTimeInterval
and NSDate
.
Therefore you set a value using the scalar accessor with
obj.dateLastSynced = date.timeIntervalSinceReferenceDate
and you retrieve the value with
let date = NSDate(timeIntervalSinceReferenceDate: obj.dateLastSynced)
This gives the same results as the Key-Value Coding methods
// Set:
obj.setValueForKey(date, "dateLastSynced")
// Get:
let date = obj.valueForKey("dateLastSynced")
这篇关于核心数据NSTimeInterval使用访问器直接是bug的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!