无法弄清楚造成这次崩溃的原因。我枚举NSMutableArray
并将某些对象的索引放入可变索引集,然后尝试从数组中删除相应的对象。这是我的代码
NSMutableIndexSet *itemsToRemove;
UIBarButtonItem *item;
NSUInteger index;
for (item in self.rightView.toolbarItems)
{
if (item.tag == MLPAD_RIGHT_VC_BACK_TO_CENTRAL_ITEM_TAG){
[itemsToRemove addIndex:index];
index ++;
}
}
[self.rightView.toolbarItems removeObjectsAtIndexes:itemsToRemove];
最后一行崩溃并给我一个EX_BAD_ACCESS
。
任何想法为什么? 感谢
答案 0 :(得分:2)
你没有分配/初始化itemsToRemove
- 如果你正在使用ARC,它被初始化为nil
,如果没有,它可能包含垃圾 - 如果你想让它成为可接受的话后来作为一个论点传递......
您也没有将index
初始化为零...
(为什么我怀疑你是来自托管语言?...)
与崩溃无关,但它仍然是语义错误:即使未满足该条件,您也必须增加index
:
for (item in self.rightView.toolbarItems)
{
if (item.tag == MLPAD_RIGHT_VC_BACK_TO_CENTRAL_ITEM_TAG) {
[itemsToRemove addIndex:index];
}
index ++;
}
答案 1 :(得分:1)
您的主要问题是itemsToRemove
永远不会被初始化。您不能将对象添加到不是NSMutableIndexSet的NSMutableIndexSet - 尝试设置itemsToRemove = [[NSMutableIndexSet alloc] init]
或类似。
我也认为你在哪里声明index++
可能会抛出一些东西 - 如果你只是在找到要删除的项目时增加索引,那么你实际上是删除了第一个{{1} } items,而不是你想要摆脱的实际项目。考虑无条件地增加索引。
答案 2 :(得分:0)
你有几个问题。不分配itemsToRemove
,不初始化index
(内置堆栈变量不会自动初始化),也不会在每次循环迭代时递增index
。
NSMutableIndexSet *itemsToRemove = [NSMutableIndexSet new];
NSUInteger index = 0;
for (UIBarButtonItem *item in self.rightView.toolbarItems)
{
if (item.tag == MLPAD_RIGHT_VC_BACK_TO_CENTRAL_ITEM_TAG){
[itemsToRemove addIndex:index];
}
++index;
}
[self.rightView.toolbarItems removeObjectsAtIndexes:itemsToRemove];
使用块枚举方法可以最小化index
类型的错误,该方法传入当前索引。