removeFromSuperview EXC_BAD_ACCESS

时间:2014-08-29 14:18:58

标签: ios objective-c iphone exc-bad-access

我从iOS 6.0开始为iPhone开发游戏。

在iOS 7.1上运行的5S上运行正常但是在使用iOS 6.1.3的旧版3GS上进行测试时,它会出现" EXC_BAD_ACCESS代码:0"当试图从superview中删除一些自定义UIView时。

我记录了我的自定义视图及其超级视图(不是零),但没有任何可行的工作!

还尝试使用lldb命令记录我的视图和超级视图,并确认它们不是零。

任何想法?无法理解它如何在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;
    }
}

2 个答案:

答案 0 :(得分:0)

您应该可以在任何有效的UIView上调用removeFromSuperview(无论是否有超级视图),这样就不会导致错误。我的猜测是其中一个指针(不是nil)指向一个已发布的对象。

答案 1 :(得分:0)

我通过在删除超级视图之前检查超级视图来解决同一问题:

if(self.loadingView.superview){
        [self.loadingView removeFromSuperview];
    }