2011-10-22 6 views
4

iPhoneのプログラムで問題が発生しています。これは私のコードです - 私は財産NSArrayの数を整数値と比較すると、コードが正しく実行されない

@property (nonatomic) NSInteger selectedGradeIndex; 

を持っていると私は、次のセッターメソッドを書いた今、アレイ

grades = [[NSArray arrayWithObjects:@"Grade 1", @"Grade 2", @"Grade 3", nil] retain]; 

を作成し、私のビューコントローラののviewDidLoadで

- (void) setSelectedGradeIndex:(NSInteger)newValue 
{ 
    if(newValue >= [grades count]) 
    { 
    NSLog(@"newValue = %d >= [grades count] = %d",newValue, [grades count]); 
    newValue = 0; 
    } 
    else if(newValue < 0) 
    { 
    NSLog(@"newValue = %d < 0",newValue); 
    newValue = [grades count] - 1; 
    } 

    selectedGradeIndex = newValue; 
    lblGrade.text= [grades objectAtIndex:selectedGradeIndex]; 
} 

コードのどこかにある

self.selectedGradeIndex = -1; 

セッター内のログは

newValue = -1 >= [grades count] = 6 

私は混乱していますを示しています。ログが条件が偽であることが明確に示されている場合、コントロールは最初のif条件の内側に移動するのはなぜですか?

私は

- (void) setSelectedGradeIndex:(NSInteger)newValue 
{ 
    int count = [grades count]; 
    if(newValue >= count) 
    { 
    NSLog(@"newValue = %d >= count = %d",newValue, count); 
    newValue = 0; 
    } 
    else if(newValue < 0) 
    { 
    NSLog(@"newValue = %d < 0",newValue); 
    newValue = count - 1; 
    } 

    selectedGradeIndex = newValue; 
    lblGrade.text= [grades objectAtIndex:selectedGradeIndex]; 
} 

にセッターを変更し、期待通り今ではすべてが動作します。ログは

newValue = -1 < 0 

私は以前の方法が失敗した理由を教えていただけますか?

答えて

7

あなたはunsigned int型(-[NSArray count]のタイプで署名int型(あなたの変数)を比較すると、署名したint型は符号なしに昇格されています。数-1は非常に大きなunsigned int型に変換されます。したがって、-1 > 6

関連する問題