我有这个片段:
1: if ((s >= kEnumValue1) && (s <= kEnumValue2)) {
2: MyObject * o = [self findObjectFor:s];
3: if ([o isValidFor:self]) {
4: [arrayOfMyObjects removeObject:o];
5: for (MyObject * mo in arrayOfMyObjects) {
6: ...
7: }
8: }
9: }
出于一些非常奇怪的原因,当我的代码到达第4行时,如果我跳过,它会返回到同一线程上方法的开头,而不会通过第5行。有没有人知道为什么会这样?
NSMutableArray上的removeObject没有提到任何异常。
答案 0 :(得分:2)
可以安全地假设你不在removeObject:
中找到了一个错误(除非你自己编写)。
您检查过arrayOfMyObjects
吗?这不是零吗?它包含什么吗?
答案 1 :(得分:1)
好的,在我项目的所有类中进行了大量调试之后,我发现,当MyObject的发布被调用时,它在另一个类上调用“release”(因为它是最后一个引用,它调用“dealloc”),再次为第三个类,然后,它在NSMutableDictionary中调用removeObjectForKey:nil。这会引发一个根本没有记录的NSInvalidArgumentException。太邪恶了......