核心数据NSTimeInterval使用访问器直接是bug [英] Core Data NSTimeInterval using an accessor directly is buggy

查看:159
本文介绍了核心数据NSTimeInterval使用访问器直接是bug的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆