2012-02-04 43 views
0

這是代碼:如果>語句工作不正常,爲什麼這很簡單?

int index = (gridPoint.y * self.iconsPerRow) + gridPoint.x; 
    NSLog(@"index 1: %i", index); 
    NSLog(@"count: %i", [self.icons count] - 1); 
    if (index > [self.icons count] - 1) { 
     index = [self.icons count] - 1; 
    } 
    if (index < 0) { 
     index = 0; 
    } 
    NSLog(@"index 2: %i", index); 

輸出:

NSLog index 1: -4 
NSLog count: 3 
NSLog index 2: 3 

任何想法,爲什麼發生這種情況?它應該是0,如果它是一個負數。

回答

2

這是因爲[self.icons count];返回NSUInteger(索引被轉換爲一個無符號整數,它將環繞到UINT_MAX-3)。將其更改爲以下內容:

int index = (gridPoint.y * self.iconsPerRow) + gridPoint.x; 
NSLog(@"index 1: %i", index); 
NSLog(@"count: %i", [self.icons count] - 1); 
if (index < 0) { 
    index = 0; 
} else if (index + 1 > [self.icons count]) { // In case count is 0, we add to index rather than subtract from count 
    index = [self.icons count] - 1; 
} 
NSLog(@"index 2: %i", index); 
1

-[NSArray count]返回無符號整數。它可能會將-4轉換爲unsigned int,這是一個非常大的數字。這是超過三個大,所以這種說法是越來越觸發,並將其設置爲3,試試這個:

if (index >= self.icons.count) { 
    ... 
} 

這樣就避免了演員,並且是乾淨了一點。

相關問題