我从iOS 6.0开始为iPhone开发了一款游戏。
它在iOS 7.1上运行的5S上运行良好,但在iOS 6.1.3的旧3GS上测试时,当试图从superview中删除一些自定义UIView时,它会崩溃,并显示"EXC_BAD_ACCESS代码:0"。
我记录了我的自定义视图,它是超级视图(不是零),但没有什么可以做的!
还尝试用lldb命令记录我的视图和超级视图,它确认它们不是nil。
知道吗??无法理解它如何在iOS7上工作而在iOS6上不工作!
这里的代码,当我得到错误:
- (void)didMoveToParentViewController:(UIViewController *)parent{
if(parent == nil){
for (LevelNumberView *button in self.levelButtons) {
if(self.view && [self.view.subviews containsObject:button]){
NSLog(@"-- button:%@", button);
[button removeFromSuperview];
}
}
self.levelButtons = nil;
[self.titleView removeFromSuperview];
self.titleView = nil;
[self.view removeFromSuperview];
self.delegate = nil;
}
}
您应该能够在任何有效的UIView上调用removeFromSuperview
(无论它是否具有超视图),这样就不会导致错误。我的猜测是其中一个指针(不是零)指向一个释放的对象。
我在删除超视图之前使用检查来修复相同的问题:
if(self.loadingView.superview){
[self.loadingView removeFromSuperview];
}