好的,所以我自己调试了这个问题,因为这是一个没有答案的帖子,我想我应该解释一下我是如何解决它的。
在我的情况下,错误是由 试图获取没有分配标签的 UIImageView 的标签引起的。
首先我尝试了明显的解决方案:
- 退出 xcode 和模拟器,重新打开,尝试再次构建
- 重新启动计算机,重新打开,尝试再次构建
- 执行清洁(cmd + shift + K)。
这些都不起作用,所以我回顾了我在代码中所做的看似无辜的更改。
这导致了崩溃:
if (!([[buttonsArray objectAtIndex:i] tag] > 299 )) {
//NSLog(@"removed [buttonsArray removeObjectAtIndex:i]:%@",[buttonsArray removeObjectAtIndex:i]);
[buttonsArray removeObjectAtIndex:i];
}
这没有:
if ([[buttonsArray objectAtIndex:i] class] != [UIButton class] ) {
//NSLog(@"removed [buttonsArray removeObjectAtIndex:i]:%@",[buttonsArray removeObjectAtIndex:i]);
[buttonsArray removeObjectAtIndex:i];
}
我的数组包含 3 个 UIButton,每个都有大于 299 的标签和一个 UIImageView。 Array 的 NSLog 显示:
2012-05-10 01:46:14.555 My Application[542:fe03] buttonsArray:(
"<UIImageView: 0x6b7f940; frame = (0 0; 252 272); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x6b71dc0>>",
"<UIButton: 0x6b7ae70; frame = (8 8; 53 53); opaque = NO; tag = 300; layer = <CALayer: 0x6b6fb70>>",
"<UIButton: 0x6b8be00; frame = (69 8; 53 53); opaque = NO; tag = 301; layer = <CALayer: 0x6b8bd70>>",
"<UIButton: 0x6b8c1b0; frame = (130 8; 53 53); opaque = NO; tag = 302; layer = <CALayer: 0x6b8c140>>"
)
所以问题是 UIImageView 没有分配标签。当我试图将其符号与 299 进行比较时,编译器抛出了这个错误。我认为这没问题(我在某处读到未分配标签默认为 0)但我猜不是!