2012-07-13 76 views
2

我想基於兩個整數的值執行邏輯。在這裏,我定義我的整數,而我也有NSLog的,所以我可以看到,如果值是正確的,當我運行代碼:如果語句比較整數不工作在目標c

int theHikeFlag = (int)[theNewHikeFlag objectAtIndex:(theID-1)]; 
NSLog(@"theHikeFlag: %@",theHikeFlag); 
int fromTheDB = [self.detailItem hikeFlag]; 
NSLog(@"fromTheDB: %d",fromTheDB); 

這裏是邏輯:

if (theHikeFlag==1) { 
    [email protected]"You have"; 
} 
else if (theHikeFlag==0) { 
    [email protected]"You have not"; 
} 
else { 
    if (fromTheDB==1) { 
     [email protected]"You have"; 
    } 
    else { 
     [email protected]"You have not"; 
    } 
} 

舉個例子這個代碼是如何工作的。當theHikeFlag=1fromTheDB=0時,代碼繞過if和else,如果直接進入else並設置hikeString="You have not"。這意味着我的結果與HikeFlag無關,並且基於fromTheDB整數。

+2

如果'theNewHikeFlag'是一個'NSArray',那麼那些存儲在NSObject *中的東西不應該被轉換爲基本的數據類型。如果將它們存儲爲'NSNumber *',則將它們轉換爲此類型,然後採用'intValue' – 2012-07-13 13:43:18

+0

您可以告訴我在運行所有可能的測試用例時獲得的日誌輸出嗎?我有一種感覺奇怪的事情發生時,你(int)施放任何在NewHikeFlag – jacerate 2012-07-13 13:44:45

回答

5

既然你不能存儲int S IN的數組,行

(int)[theNewHikeFlag objectAtIndex:(theID-1)]; 

是不是做你認爲它應該。您需要從NSNumber中提取數據,而不是投射到int

int theHikeFlag = [[theNewHikeFlag objectAtIndex:(theID-1)] intValue]; 

爲什麼日誌輸出是正確的有點有趣:你連續犯了兩個錯誤!首先,您將一個指針重新解釋爲int,然後讓NSLog通過添加與int不兼容的格式說明符%@重新將其重新解釋爲對象,但可以正常使用指針!由於int值包含指向NSNumber的指針,因此NSLog會生成「正確」輸出。

+0

謝謝!它現在很好用!我感謝您的幫助。 – lemontwist 2012-07-13 13:48:22

+0

不錯的解決方案!謝謝。我嘗試將值((NSInteger),(int)甚至(布爾);他們沒有工作。 – 2014-03-30 04:37:19