2012-08-14 67 views
0

我有一個NSSegmentedControl設置爲發件人,當用戶單擊對象中的每個按鈕時添加函數。下面的代碼片段對我來說一直很好。它仍然如此,但是當我使用64位體系結構構建時,我收到以下警告。當我恢復到32位時,警告消失。有人可以告訴我如何編輯代碼? 感謝您的幫助。 - 保羅。可可NSInteger在64位體系結構構建時

「隱式轉換損失整數精度:NSInteger的(又名長),以‘INT’

int selectedSegment = [arSegController selectedSegment]; 
int clickedSegmentTag = [[arSegController cell] tagForSegment:selectedSegment]; 

if (clickedSegmentTag == 0) { 

回答

1

您需要使用NSInteger而不是int爲您的變量可以只是看在聲明中NSSegmentedControl.h,但更好的是閱讀蘋果的64-Bit Transition Guide for Cocoa

+0

謝謝分配。知道它整理出來了... - 保羅。 – Paul 2012-08-14 15:16:24

+0

當然,很樂意提供幫助。請點擊答案左邊的複選標記,將其標記爲「已接受」;接受答案將有助於您日後獲得更多答案。謝謝! – 2012-08-14 15:20:21

1

一個NSInteger無非是typedef定義更長時間。您應該使用NSInteger的,但如果由於某種原因,你需要使用INT然後嘗試類型轉換。

int selectedSegment = (int)[arSegController selectedSegment]; 
1

64 bit guide

我相信你長到一個int是4個字節長指派的8個字節長的變量。我認爲在mac中他們使用LP64,這意味着long和指針獲得8個字節。聲明selectedSegment NSInteger以及應該解決問題。在32位機器上,長度將是32位,而在64位機器上,它將是64位。

NSInteger selectedSegment = [arSegController selectedSegment]; 
NSInteger clickedSegmentTag = [[arSegController cell] tagForSegment:selectedSegment]; 

if (clickedSegmentTag == 0) { 
0

NSInteger似乎被定義爲在64位平臺上長(所以在32位OS X和iOS上你不會得到這個警告)。而且,在這些平臺上,long長度爲64位,而int只是32位 - 所以,正如編譯器告訴你的那樣,你會失去精度。 Numbers> = 2^32不能用32位表示,因此對於這些數字,您可能會遇到一些奇怪的行爲(與數字被截斷有關)。

解決方法:明確地將方法的返回值轉換爲(int)