从nsmutablearray中删除两个对象

时间:2012-02-07 14:03:36

标签: iphone nsmutablearray

我有一个带有五个对象的NSMutableArray。我想在满足某个条件时删除两个对象。但它给了我一个错误----- *由于未捕获的异常'NSRangeException'终止应用程序,原因:'* - [NSMutableArray objectAtIndex:]:索引3超出边界[0 .. 2 ]”   这是我的代码

  -(IBAction)buttonPressed1:(id)sender{
for (int i = 0; i < [objectArray1 count]; i++) {

    if ([[objectArray1 objectAtIndex:3] isEqualToString:@"xyz"]) 
    {

        NSMutableIndexSet *indexes = [NSMutableIndexSet indexSetWithIndex:3];
        [indexes addIndex:4];
        [objectArray1 removeObjectsAtIndexes:indexes];
        NSLog(@"Hello %@",objectArray1 );
  }
}

如果我删除了{}条件,它工作正常。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:4)

如果你想删除索引3和4处的对象,就像你在这里做的那样,那么就不要在循环内部进行。您将获取5个对象的数组,并在第一次通过循环时删除其中的最后2个对象,从而在阵列中留下3个对象。下一次循环运行时,您对数组索引3处的项目运行相同的检查,并且该数组不再具有该索引,因为您已将其删除。

答案 1 :(得分:0)

好像你要经历4次循环。
如果条件为真,则条件代码将执行4次 您创建索引4 你删除它。
第二次删除它时,会发生崩溃。

如果我理解你想做什么,这就是代码:

if ([[objectArray1 objectAtIndex:3] isEqualToString:@"xyz"] && 
   objectArray1.count == 5) {
   NSMutableIndexSet *indexes = [NSMutableIndexSet indexSetWithIndex:3];
   [indexes addIndex:4];
   [objectArray1 removeObjectsAtIndexes:indexes];
   //less code:
   //[objectArray1 removeLastObject];
   //[objectArray1 removeLastObject];       
}