我有一个带有五个对象的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 );
}
}
如果我删除了{}条件,它工作正常。任何帮助将不胜感激。
答案 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];
}