2014-02-24 51 views
0

我有一个相当有趣的问题。我正在写一个使用iOS 7的位板的国际象棋引擎,我想在iPhone 4,4s,5和5s上工作。到目前为止,我在iOS 64位iPhone模拟器上做了所有测试,但我决定在我的手机上运行它,并且所有黑色棋子都丢失了。我很快发现,这是因为我的iPhone是iPhone 5,我认为它在64位数字上进行按位运算时存在一些问题。是否有任何解决方法可用于让此应用在iPhone 4,4s和5上工作?或者我必须制作这款iPhone 5s专用的?如果是这样的话,那将是相当令人沮丧的。iPhone 4和5上的64位整数的位板按位操作?

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

+0

显示一些代码,尤其是定义存储位的方式。 – Arkku

+0

@Arkku - 我将它们存储为u_int_64(unsigned long long int typdef作为Bitboard)作为非原子性质。我现在在工作,但是当我今晚回到家时会发布一些代码。 – AttilaTheFun

回答

0

好吧,我终于明白发生了什么事。我一直在nsarrays中将nsboard作为nsnumbers存储,并使用integerValue将它们取出。这在64位设备上运行良好,因为integerValue返回一个nsinteger,它是基于处理器的32位或64位整数。一旦我将所有函数调用改为unsignedLongLongValue,它就像魅力一样。