2012-11-06 73 views
0
-(IBAction)someMethod:(UIStepper *)sender{ 
    int x=sender.value; //This is an integer from 0-8; 
    NSLog(@"%f",sender.value); 
    NSArray *rpmValues = [[NSArray alloc]initWithObjects:@"a",@"b",@"c",@"d",@"e",@"f",@"g",@"h",@"i", nil]; 
    if (x<=[rpmValues count]) { 

     myLabel.text = [rpmValues objectAtIndex:x]; 
    } 
    NSLog(@"%i",[rpmValues count]); 
} 

上面是我的代碼,我想要做的是通過更改UIStepper來更改UILabel顯示。這非常簡單。但當我改變按步進值,它崩潰:NSArray索引1超出空陣列的界限

*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** - [__NSArrayM objectAtIndex:]: index 1 beyond bounds for empty array' 
*** First throw call stack: 

而且[rpmValue計數]是9.我真的很困惑。誰能幫我?

+2

除了'if'語句需要使用'<'而不是'<='外,這段代碼看起來沒問題。您是否100%確定錯誤來自此代碼而不是其他地方? – rmaddy

+0

將'int x'手動設置爲1似乎適用於我,你能試試嗎?你的NSLog語句是錯誤的,'NSLog(@「%d」,sender.value);'print?其他的東西一定會導致問題。 – WDUK

+0

問題是當x = [rpmValues count]時。在索引中獲取對象不起作用,因爲索引從0開始。 – jajo87

回答

4

該代碼似乎很好(請參閱我對該問題的評論);您的問題可能會由於使用

if (x<=[rpmValues count]) { 

這將包括數組超過索引範圍的數目。使用

if (x < [rpmValues count]) { 
0

最起碼if (x<=[rpmValues count])應該是if (x<[rpmValues count])。否則,如果你有一個包含兩個實體的數組,那麼你允許自己訪問索引0,1和2 - 總共有三種可能性。

基於相似的邏輯,您可能在'9'的步進器上設置了maximumValue嗎?