2014-02-24 55 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,它就像魅力一樣。