访问一个数组元素,Objectice C

问题描述:

嗨即时尝试访问数组中的元素,并改变他们,例如我有一个数组和数组变量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

你得到的错误是什么?可能有几件事看着你的代码。如果数组的长度为零,那么访问索引为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