【问题标题】:Core Data changes value of 64-bit IntegerCore Data 改变 64-bit Integer 的值
【发布时间】:2015-06-11 07:00:27
【问题描述】:

我是 iOS 开发新手,并且一直在我正在开发的应用程序中使用核心数据。我有一个时间戳值,它作为属性存储在我的 NSManagedObject 中,并且该属性在核心数据模型中声明为 Integer-64 位。它在 NSManagedObject 子类中声明为 NSNumber。

当我在我的 iPhone 6 和 iOS 8 上运行它时,代码运行良好,并且时间戳按预期存储。但是,当我在装有 iOS 7 的 iPhone 4 上运行相同的代码时,数字会发生变化。我不确定为什么会发生这种情况,因为核心数据模型相同并将属性声明为 Integer-64。

当我创建这个 NSManaged 对象并填充时间戳属性时,我使用

[NSNumber numberWithUnsignedInteger: timeStampValue]

然后我保存上下文。但是当我获取对象并读取值时,我的 iPhone 4/iOS7 上的值会发生变化。我不确定这是 iPhone 4 还是 iOS7 问题,因为我没有其他设备来测试它。它在模拟器上也可以正常工作。

如果有人能告诉我为什么会发生这种情况以及我能做些什么来解决它,我将不胜感激。

如果需要更多信息,我会提供。

【问题讨论】:

  • 我没有给你一个明确的答案,但我怀疑这是 Core Data 在较小的 iOS 设备上节省空间的方式。几个条目不会有太大区别,但是如果您在数据库中有 500000 个实体,那么您将节省大量空间。在解决方案方面,你为什么不使用 NSDate
  • @RASS,这就是我最终解决当前问题的方法。但我还是想知道如何解决其他大整数,以防万一以后再遇到。
  • @RASS,我发现了错误。有兴趣的可以看我贴的答案。

标签: ios objective-c iphone core-data


【解决方案1】:

致将来可能遇到此问题的任何人。我找到了解决方案。这是 iPhone 4 的问题。

问题不在于 Core Data 或那里的 64 位整数设置。由于objective-c的大小为long,错误到达。这就是我从服务器检索初始时间戳值并将其存储为 long 的方式。我假设 long 是 64 位(就像在 Java 中一样)。

在 iPhone 6 上,long 确实是 64 位,因此值没有改变。 然而,在 iPhone 4 上,long 的大小为 32 位,并且该值因大数字而损坏。将存储变量更改为 long long 解决了这个问题。

【讨论】:

  • 我也面临同样的问题。在将长 inerger no 像 8316424477520953000 保存为 integer64 时会产生问题。在获取没有更改的时间。你能举个例子吗?
  • 我也有同样的问题,怎么改成long long,我们的core data没有这种类型?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-09
  • 2011-08-04
  • 2019-04-04
  • 1970-01-01
  • 1970-01-01
  • 2017-03-25
相关资源
最近更新 更多