0

我有一个相当有趣的问题。我正在使用 iOS 7 的位板编写一个国际象棋引擎,我想在 iPhone 4、4s、5 和 5s 上工作。到目前为止,我一直在 iOS 64 位 iPhone 模拟器中进行所有测试,但我决定在手机上运行它,所有的黑棋子都不见了。我很快发现这是因为我的 iPhone 是 iPhone 5,我认为它在 64 位数字上的按位运算存在一些问题。有什么解决方法可以让这个应用程序在 iPhone 4、4s 和 5 上运行吗?还是我必须只制作这款 iPhone 5s?如果是这样的话,那将是相当令人沮丧的。

更新:经过进一步调查,我确定问题在于,虽然我所有明确声明的类型都是无符号长整型,但因为我将它们的集合作为对象文字存储在 nsarrays 中,当我在调用 objectForKey 后调用 integerValue 时,这会返回一个NS 整数。但是,在 32 位手机上,当我需要 64 位时,NSInteger 是 32 位。有没有办法在 NSArray 中存储和检索 64 位整数?

4

1 回答 1

0

好吧,我终于弄清楚发生了什么。我一直在将位板集合存储为 nsarray 中的 nsnumber 并使用 integerValue 将它们取出。这在 64 位设备上运行良好,因为 integerValue 返回一个 nsinteger,它是基于处理器的 32 位或 64 位整数。一旦我将所有函数调用都更改为 unsignedLongLongValue,它就像一个魅力。

于 2014-02-25T06:29:57.467 回答