从Superview EXC_BAD_ACCESS中删除



我从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];
    }

最新更新