2012-07-10 119 views
0

嗨即時嘗試訪問數組中的元素,並改變他們,例如我有一個數組和數組變量x,我必須通過數組並用值替換變量x 。我試過這個,但是我在for語句中得到一個錯誤,該語句是由於未捕獲的異常'NSRangeException'導致終止應用程序,原因:'* - [__ NSArrayM objectAtIndex:]:index 3 beyond bounds [0..2]'訪問一個數組元素,Objectice C

if([stack containsObject:@"X"]) 
    { 
    int x; 
    for(x=0; [stack objectAtIndex:x] ;x++) 
    { 
    [stack replaceObjectAtIndex:x withObject:[variableValues objectForKey:@"X"]]; 
    } 
+0

試圖做isEqualToString,但它讓我有錯誤太 – 2012-07-10 06:19:25

+0

你需要在'stack'一個循環來檢查'if'條件與'isEqualTOString:' – samfisher 2012-07-10 06:24:46

+0

...」一個錯誤「... – borrrden 2012-07-10 06:24:49

回答

1

你得到的錯誤是什麼?可能有幾件事看着你的代碼。如果數組的長度爲零,那麼訪問索引爲0的對象將引發錯誤。另外,數組需要可變才能替換工作。另外,如果您的objectForKey返回nil,則在替換方法中,嘗試替換nil也會引發錯誤。請參見下面更新的代碼:

if([stack containsObject:@"X"]) 
{ 
    assert([stack isKindOfClass:[NSMutableArray class]]); 
    NSUInteger count = [stack count]; 
    for(NSUInteger x = 0; x < count ;x++) 
    { 
     id value = [variableValues objectForKey:@"X"]; 
     if (value != nil) 
     { 
      [stack replaceObjectAtIndex:x withObject:value]; 
     } 
    } 
} 
+0

爲什麼你必須在for循環中聲明值變量?爲什麼不在for循環之前說明呢? – 2012-07-11 06:10:48

+0

我試過上面的方法,但問題是,它會取代NSMutableArray中的所有對象,所以我試着添加if(value!= nil && [value isEqualToString:@「X」])但我得到錯誤[__NSCFNumber isEqualToString: ]:無法識別的選擇器發送到實例。我將如何進行比較以查看堆棧中的變量是否等於x? – 2012-07-11 06:50:13