为什么Core Data托管对象中的NSDate转换为NSTimeInterval?

Mik*_*e S 22 core-data ios

我有一个对象,其属性具有在我的xcdatamodeld对象中定义的Date类型.为什么它使用NSTimeInterval生成NSManagedObject类?如何在其上设置NSDate然后让NSDate退出呢?

tee*_*yay 28

如果我在生成文件时选中"使用原始数据类型的标量属性"复选框,我会得到这个.

这是因为NSTimeInterval是伪装的双重,而NSDate是一个继承自NSObject的类.

  • 答案是正确的,但推理对我来说毫无意义.Objective-C中的每个类都继承自NSObject.的问题是:为什么是"使用标量属性为原始数据类型"选中复选框生成NSManagedObject子类时翻译成一个NSString对象和日期属性到一个NSInterval字符串属性.我会接受"在Apple工作的小鬼"的回答,顺便说一下. (3认同)
  • @ElisevanLooij与数字,日期和布尔值不同,字符串不能表示为标量属性,因此复选框不会影响字符串属性转换.二进制数据属性也是如此. (2认同)

shi*_*him 15

编辑:显然dateWithTimeIntervalSince1970只是为了NSDateFormatter.NSDate使用不同的参考NSDateFormatter,如评论中所解释的那样,2001年.对不起我的无知.

如果在NSManagedObject为实体生成子类时选择了"使用基本数据类型的标量属性" ,则它将使用标量属性(如int和float)而不是NSNumber.这包括NSDate; 它将NSDate变成一个NSTimeInterval只是一个双倍.这NSTimeInterval是自Apple使用的1970年标准时代以来的时间间隔(如果它在1970年之前它可能是负面的).

如果你需要将它转换NSTimeInterval成一个非常简单NSDate,但是如果你没有庞大的数据库,那么你可能不想打扰选择那个复选框.

要将此时间间隔转换为正常NSDate使用[NSDate dateWithTimeIntervalSince1970: timeInterval]; ,timeInterval您将从数据库中获取所需的时间间隔.这可以放在您的NSManagedObject子类中,这样当您获得该属性时,NSDate无论如何都会获得.

  • 这不完全正确.文档状态:NSManagedObject使用NSDate对象表示日期属性,并在内部将时间存储为自参考日期(具有GMT时区)以来的NSTimeInterval值.参考日期= 2001年1月1日,1970年1月1日 (6认同)