Objective-C奇怪错误信号
我正在学习Objecive-C,并尝试在循环中删除object方法。 它不能正常工作。我接收线程1:程序接收信号:SIGABRT。在那条线上。 怎么了Objective-C奇怪错误信号,objective-c,sigabrt,Objective C,Sigabrt,我正在学习Objecive-C,并尝试在循环中删除object方法。 它不能正常工作。我接收线程1:程序接收信号:SIGABRT。在那条线上。 怎么了 NSMutableArray *bookListMutable = [NSMutableArray arrayWithObjects:@"TitleM 2", @"TitleM 4", @"TitleM 5", nil]; [bookListMutable addObject:@"TitleM 3 added"]; [bookListMutabl
NSMutableArray *bookListMutable = [NSMutableArray arrayWithObjects:@"TitleM 2", @"TitleM 4", @"TitleM 5", nil];
[bookListMutable addObject:@"TitleM 3 added"];
[bookListMutable insertObject:@"TitleM 1 inserted" atIndex:0];
long countMutable;
countMutable = bookListMutable.count;
for(int y = 0; y < countMutable; y++){
[bookListMutable removeObject:[bookListMutable objectAtIndex:y]];
}
p.S.xCode 4.1问题在于您以错误的顺序删除项目。删除索引0处的项后,所有索引都将递减1。所以你可以这样做:
for(int y = countMutable-1; y >= 0; y--) {
[bookListMutable removeObject:[bookListMutable objectAtIndex:y]];
}
或者这个:
for(int y = 0; y < countMutable; y++) {
[bookListMutable removeObject:[bookListMutable objectAtIndex:0]];
}
我将此作为对代码的一个小修改,但要注意,有更好的方法可以完成类似的操作,例如使用removeObjectAtIndex:。请参阅文档:我发现代码中有很多地方可能有问题,但最糟糕的是:从索引0开始删除数组中的对象,直到计数。这意味着i=0,1,2,3,而数组继续将元素移回位置0。这肯定会引发异常,这样只能擦除一半数组
替代方法:使用清除数组[bookListMutable removeAllObjects]的方法,或从计数向下迭代到0。不应按该顺序删除项。假设数组有4个项{0,1,2,3},并模拟程序的执行: y=0的第一次迭代:从{0,1,2,3}中删除索引0处的项会得到{1,2,3} y=1的第二次迭代:从{1,2,3}中删除索引1处的项会得到{1,3} y=2的第三次迭代:从{1,3}中删除索引2处的项。哎呀,索引2=>Exception处没有任何项 所以你应该像这样向后迭代:
for(int y = countMutable-1; y >= 0; y--) {
[bookListMutable removeAtIndex:y]];
}
或者使用内置方法:
[bookListMutable removeAllObjects];
1次更新,有一个Xcode 4.3。2 SIGABRT通常是一个例外。你检查控制台了吗?那是哪条线?还有,为什么不使用removeObjectAtIndex:,或者removeAllObjects?!我试着做这本书上的练习