【发布时间】:2010-11-27 13:48:35
【问题描述】:
我试图在另一个视图以模态方式呈现后立即显示一个模态视图(第二个是出现的加载视图)。
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
// Show load
LoadViewController *loader = [[LoadViewController alloc] init];
[self presentModalViewController: loader animated:NO];
[loader release];
}
但是当我这样做时,我得到一个“程序接收信号:”EXC_BAD_ACCESS“。”错误。
堆栈跟踪是:
0 0x30b43234 in -[UIWindowController transitionViewDidComplete:fromView:toView:]
1 0x3095828e in -[UITransitionView notifyDidCompleteTransition:]
2 0x3091af0d in -[UIViewAnimationState sendDelegateAnimationDidStop:finished:]
3 0x3091ad7c in -[UIViewAnimationState animationDidStop:finished:]
4 0x0051e331 in run_animation_callbacks
5 0x0051e109 in CA::timer_callback
6 0x302454a0 in CFRunLoopRunSpecific
7 0x30244628 in CFRunLoopRunInMode
8 0x32044c31 in GSEventRunModal
9 0x32044cf6 in GSEventRun
10 0x309021ee in UIApplicationMain
11 0x00002154 in main at main.m:14
有什么想法吗?我完全被难住了!加载视图是空的,所以肯定没有任何事情会导致错误。这与在同一个事件循环中以模态方式启动 2 个视图有关吗?
谢谢,
迈克
编辑:很奇怪……我稍微修改了一下,加载视图会在一点延迟后显示,这很好用!所以它似乎在同一个事件循环中!
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
// Show load
[self performSelector:@selector(doit) withObject:nil afterDelay:0.1];
}
- (void)doit {
[self presentModalViewController:loader animated:YES];
}
【问题讨论】:
-
EXC_BAD_ACCESS 是从哪里来的?你在这里给了我们一个堆栈跟踪,但我不确定这个代码块中是否发生了错误。您能否编辑帖子以向我们提供包含所有线程所在位置的完整日志?
-
我不确定它来自哪里。那是我唯一的痕迹,看起来错误的访问不是来自我的代码,所以它是内部访问的东西,所以我无法查明它!我已确保所有内容都已保留,所以我不知道发生了什么!
-
尝试将
loader放入自动释放池中。我认为加载器消失得太快了,可能是因为当前视图控制器必须为新视图和视图控制器让路。其他想法:使用调试器和监视加载器。如果它是造成问题的原因,您会以这种方式发现它。如果没有,请继续在调试器中四处寻找,您可能会弄明白。 -
好的,我试试看。如何使用调试器查看加载程序?通过使用断点?或者还有其他方法可以监控除此之外的事情吗?有兴趣知道是否有其他调试方法!
-
我认为循环的原因是您正在加载的新视图控制器默认情况下有一个视图确实出现了方法,并且它具有 [super viewdidappear animated];这意味着它将再次回调您的主视图控制器的 viewDidAppear,就像它会循环一样
标签: iphone memory-management uiviewcontroller crash