我从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;
}
}
答案 0 :(得分:0)
您应该可以在任何有效的UIView上调用removeFromSuperview
(无论是否有超级视图),这样就不会导致错误。我的猜测是其中一个指针(不是nil)指向一个已发布的对象。
答案 1 :(得分:0)
我通过在删除超级视图之前检查超级视图来解决同一问题:
if(self.loadingView.superview){
[self.loadingView removeFromSuperview];
}