epo*_*gee 0 cocoa integer core-data objective-c
所以我在去年3月将iPad应用程序发送到了应用程序商店.它包含一个Core Data模型,其中包含预先填充的二叉树数据存储.我编写了一个小型的64位OSX应用程序,用于将数据从任意200MB的SQLite数据库转换并提取到我的自定义Core Data模型,从而生成一个整齐的20MB大小的SQLite持久存储.所有花花公子,进入版本控制,永不回头.
现在我的客户端有一个更新的数据库,他们也希望发布更新的应用程序.我认为这不会比再次运行转换器并重新发布到iTunesConnect更多,但没有.我的转换器不会运行,或者它不会输出所需的商店.我花了好几个小时试图弄清楚什么是错的,然后最终将所有内容还原到我最初将我的应用程序提交到商店时,然后猜测,转换器甚至不会转换它.相同的代码,相同的输入数据库,一切都一样
在查看我的应用程序产生的一些数据时,我发现一些值存储在Core Data模型中的方式存在奇怪的差异.在这三行中,组对象是核心数据实体.标识符属性的类型为Integer 16
,模型中的所有基于整数的值都是类型.有趣的是,在查看这三行之后的值时:
int identifier = 39899;
NSNumber *numIdentifier = [NSNumber numberWithInt:identifier];
group.identifier = numIdentifier;
Run Code Online (Sandbox Code Playgroud)
我得到这三个值:
identifier: 39899
numIdentifier: 39899
group.identifier: -25637
Run Code Online (Sandbox Code Playgroud)
呃,什么?该数字当然源于源数据库,但即使手动插入,核心数据实体上的最后一个属性也会出现乱码.为什么到底是最后一行不同?消极的是什么?当然这个值甚至没有接近INT_MAX,为什么它看起来像是包装一个有符号的int?为什么现在回到3月份时会有所不同,使用相同的代码和相同的输入数据库,它曾经工作得很好?从那时起,我唯一能记住的就是升级到OSX Lion.但肯定不会影响到这一点,对吧?
有人会知道我做错了什么,我可能已经在去年3月做错了,我怎么能解决这个烂摊子?