Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 为什么我的核心数据模型不再有效?整数16值翻转?_Objective C_Cocoa_Core Data_Integer - Fatal编程技术网

Objective c 为什么我的核心数据模型不再有效?整数16值翻转?

Objective c 为什么我的核心数据模型不再有效?整数16值翻转?,objective-c,cocoa,core-data,integer,Objective C,Cocoa,Core Data,Integer,所以我在去年三月份就把它送到了应用商店。它包含一个具有二叉树数据预填充存储的核心数据模型。我编写了一个小型64位OSX应用程序,将任意200MB的SQLite数据库中的数据转换并提取到我的自定义核心数据模型中,从而形成了一个整洁的20MB大小的SQLite持久存储。所有的花花公子,投入到版本控制中,再也不回头 现在我的客户有一个更新的数据库,他们也希望发布一个更新的应用程序。我想这只需要再次运行转换器并重新发布到iTunesConnect,但不会。我的转换器不会运行,或者它不会输出所需的存储。我

所以我在去年三月份就把它送到了应用商店。它包含一个具有二叉树数据预填充存储的核心数据模型。我编写了一个小型64位OSX应用程序,将任意200MB的SQLite数据库中的数据转换并提取到我的自定义核心数据模型中,从而形成了一个整洁的20MB大小的SQLite持久存储。所有的花花公子,投入到版本控制中,再也不回头

现在我的客户有一个更新的数据库,他们也希望发布一个更新的应用程序。我想这只需要再次运行转换器并重新发布到iTunesConnect,但不会。我的转换器不会运行,或者它不会输出所需的存储。我花了好几个小时试图找出问题所在,最后把所有东西都恢复到我最初向商店提交应用程序时的状态,你猜怎么着,转换器甚至都不会转换。同样的代码,同样的输入数据库,同样的一切

在查看我的应用程序生成的一些数据时,我发现一些值在核心数据模型中的存储方式存在奇怪的差异。在这三行中,组对象是一个核心数据实体。identifier属性的类型为整数16,模型中所有基于整数的值也是如此。有趣的是,当看到这三行后面的值时:

int identifier = 39899;
NSNumber *numIdentifier = [NSNumber numberWithInt:identifier];
group.identifier = numIdentifier;
我得到以下三个值:

identifier:       39899
numIdentifier:    39899
group.identifier: -25637
呃,什么?这个数字当然来自源数据库,但即使手动插入,核心数据实体上的最后一个属性也会被篡改。到底为什么最后一行不同?否定什么?当然这个值甚至不接近INT_MAX,为什么它看起来像是在包装一个带符号的INT?为什么三月份的时候它就不一样了,用同样的代码和同样的输入数据库,它过去工作得很好?从那以后我唯一记得的变化就是升级到OSX Lion。但这肯定不会影响这个,对吗

有人知道我做错了什么,去年3月我可能已经做错了什么,以及我如何解决这个问题吗?

正常的整数是32位,而不是16位。虽然32位对于该值来说足够大,但16位则不然-25637是溢出值。您需要更小的数字或更大的变量。

另请参见 iOS 5中的CoreData和整数宽度

在iOS 3或4中,可以存储比模型指定的更宽的整数,但在iOS 5中,整数的宽度现在被强制执行

相关堆栈溢出问题

天啊,你说得对。65536未签名。那么,这究竟是如何在三月份起作用的呢?我想现在就检查答案,以免让我更丢脸,但这么说是为了等待,再放纵一点……也许旧数据库中的所有标识符都不到32K?是的,但奇怪的是,我恢复到了与当时相同的输入数据库,因为我无法理解这一点。转换器运行约45分钟,因此我将在大约一小时内知道将所有整数更改为32位是否有效…这解决了为什么它在三月份有效的谜团,谢谢分享!