gpt4 book ai didi

objective-c - 为什么我的核心数据模型不再起作用? Integer16 值翻转?

转载 作者:行者123 更新时间:2023-12-03 17:29:13 27 4
gpt4 key购买 nike

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

现在我的客户有了更新的数据库,他们也想发布更新的应用程序。我认为这只需再次运行转换器并重新发布到 iTunesConnect,但事实并非如此。我的转换器无法运行,或者无法输出所需的存储。我花了几个小时试图找出问题所在,最后将所有内容恢复到我最初向商店提交应用程序时的状态,猜猜看,转换器甚至不会转换它。相同的代码,相同的输入数据库,相同的一切!

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

int identifier = 39899;
NSNumber *numIdentifier = [NSNumber numberWithInt:identifier];
group.identifier = numIdentifier;

我得到这三个值:

identifier:       39899
numIdentifier: 39899
group.identifier: -25637

呃,什么?该数字当然源自源数据库,但即使手动插入它,核心数据实体上的最后一个属性也会出现乱码。到底为什么最后一行不一样?负什么?当然,这个值甚至没有接近 INT_MAX,为什么它看起来像是包装了一个有符号 int ?为什么现在与三月份时的情况有所不同,使用相同的代码和相同的输入数据库它以前工作得很好?从那时起我记得唯一改变的是 OSX Lion 的升级。但这肯定不会影响这一点,对吗?

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

最佳答案

普通的 int 是 32 位,而不是 16 位。虽然 32 位对于该值来说足够大,但 16 位却不够! -25637 是溢出值。您要么需要更小的数字,要么需要更大的变量。

关于objective-c - 为什么我的核心数据模型不再起作用? Integer16 值翻转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7492232/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com