2010-05-04 68 views
0

我做了以下内容:dismissModalViewControllerAnimated:在模拟器崩溃,但不能在电话

[self.parentViewController dismissModalViewControllerAnimated:YES] 

此代码失败,使用模拟器,但手机本身上没有问题的作品。模拟器的控制台不显示错误。我使用NSLog语句将这一行代码定位为罪魁祸首。但是,在手机上运行时,控制台(窗口>管理器)显示上述代码已执行,应用程序继续前进,没有任何问题。

在调试器中运行代码时,以下语句出现在Xcode调试窗口的底部: GDB:数据格式化程序暂时不可用,将在“继续”之后重新尝试。 (目前不安全呼叫dlopen。)

然后窗口显示:加载43672堆栈帧。 (这听起来坏)

在调试窗口的下面一行出现无数次: [UIView的(层次)_makeSubtreePerformSelector:withObject:withObject:copySublayers:]

没有得到太多深入到我的代码,没有人知道关于或有这种情况的经验?

感谢

回答

0

我想你在哪里是关键调用这个,但你不说在哪里这个代码。

我怀疑解雇你的父VC是导致这个代码再次执行,试图再次解雇父母......基本上是一个无限循环。

1

为什么你不只是打电话[self dismissModalViewControllerAnimated:YES]。关闭你的模态视图控制器已经足够了。

我知道,它不是你的问题的答案,但也许它有助于避免你的问题。

0

感谢您的回复。

Aleksejs - 我试过你的建议没有成功。感谢您确保我首先完成了显而易见的事情。

progrmr - 我认为你可能是正确的 - 何时何地我驳回模态视图是关键,我会研究如何做到这一点。我可能需要重新设计我如何处理我的观点。

这是令人沮丧的,因为问题不会发生在iphone本身上,只发生在模拟器中。而且,我刚刚证实,使用相同的MacBook Pro,当我在家工作时,错误不会出现在模拟器中 - 问题只发生在我的办公室。奇怪,呃?

我会继续挖掘并报告我的发现。

再次感谢。

+1

@Jon:如果您的问题得到解答您的问题的答案,如果您通过点击复选标记来接受它,那将会很好。 – progrmr 2010-05-05 03:52:18

0

更新 - 我没有解决问题,而是通过重构结构来避免它。之前,在applicationDidFinishLaunching:中,我提出了一个Login视图控制器作为模态视图。然后我需要显示一个EULA视图控制器,以便用户可以同意一些合法的东西。我认为我的问题是我将EULA视图作为登录视图(也是模态)的模态。我认为,模式被提交/驳回的顺序是问题(正如程序员所怀疑的那样)。

我如何避免这个问题?我花时间了解委派模式。现在,每个模式视图(Login和EULA)都在应用程序委托类中呈现,并且在模态视图上执行某些操作时使用委托来回调。

0

如果self实际上没有modalViewController,则不应该使用self dismissModalViewControllerAnimated。只需创建一个协议,将解除操作从模式视图控制器委托给父级。当你推动模态视图控制器时,分配委托,然后当你想解除它时,调用[self.delegate dismissMe],然后在委托(父)上调用[self dismissModalViewControllerAnimated:...]。

0
[[Picker presentingViewController] dismissViewControllerAnimated:YES completion:nil]; 

而不是

[[Picker parentViewControl] dismissModalViewControllerAnimated:YES]; 

[self presentViewController:picker animated:YES completion:nil]; 

而不是

[self presentModalViewController:picker animated:YES]; 
相关问题