NSMutableArray removeObject中的奇怪错误

时间:2011-02-12 19:26:59

标签: objective-c xcode debugging ios nsmutablearray

我有这个片段:

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没有提到任何异常。

2 个答案:

答案 0 :(得分:2)

可以安全地假设你removeObject:中找到了一个错误(除非你自己编写)。

您检查过arrayOfMyObjects吗?这不是零吗?它包含什么吗?

答案 1 :(得分:1)

好的,在我项目的所有类中进行了大量调试之后,我发现,当MyObject的发布被调用时,它在另一个类上调用“release”(因为它是最后一个引用,它调用“dealloc”),再次为第三个类,然后,它在NSMutableDictionary中调用removeObjectForKey:nil。这会引发一个根本没有记录的NSInvalidArgumentException。太邪恶了......