我是iOS开发的新手,并且一直在我正在开发的应用中使用核心数据。我有一个时间戳值,它作为属性存储在我的NSManagedObject中,并且此属性在核心数据模型中声明为Integer-64位。它在NSManagedObject子类中声明为NSNumber。
当我在iPhone 6和iOS 8上运行时,代码工作正常,时间戳会按照它应该存储。但是,当我在其上安装了iOS 7的iPhone 4上运行相同的代码时,数字会发生变化。我不确定为什么会发生这种情况,因为核心数据模型是相同的,并将属性声明为Integer-64。
当我创建这个NSManaged对象并填充timestamp属性时,我使用
[NSNumber numberWithUnsignedInteger: timeStampValue]
然后我保存上下文。但是当我获取对象并读取值时,我的iPhone 4 / iOS7上的值会发生变化。我不确定这是iPhone 4还是iOS7问题,因为我没有其他设备来测试它。它也可以在模拟器上正常工作。
如果有人能告诉我为什么会这样,以及我能做些什么来解决它,我会非常感激。
如果需要更多信息,我会提供。
答案 0 :(得分:0)
对于将来可能遇到此问题的任何人。我找到了解决方案。这是iPhone 4的一个问题。
问题不在于核心数据或64位整数设置。由于objective-c的大小很长,错误到了。这就是我从服务器检索初始时间戳值的方法,并将其存储为long。我假设长到64位(就像在Java中一样)。
在iPhone 6上,长的确是64位,因此价值没有变化。 然而,在iPhone 4上,长的大小是32位,并且对于大数字,该值被破坏。将存储变量更改为long long解决了这个问题。