dismissModalViewControllerAnimated:在模拟器中崩溃但在手机上没有崩溃

时间:2010-05-04 18:16:56

标签: iphone

我正在做以下事情:

[self.parentViewController dismissModalViewControllerAnimated:YES]  

此代码无法使用模拟器,但在手机本身没有任何问题。模拟器的控制台显示没有错误。我使用NSLog语句来查明这行代码是罪魁祸首。但是,在手机上运行时,控制台(窗口>管理器)会显示上面的代码已执行,应用程序继续前进,没有任何问题。

在调试器中运行代码时,Xcode调试窗口底部会显示以下语句: GDB:数据格式化程序暂时不可用,将在“继续”后重试。 (此时打电话给dlopen是不安全的。)

然后一个窗口显示说明:加载43672堆栈帧。 (听起来不错)

在调试窗口中,以下行多次出现: [UIView(Hierarchy)_makeSubtreePerformSelector:withObject:withObject:copySublayers:]

如果没有深入了解我的代码,是否有人知道或有这种情况的经验?

由于

6 个答案:

答案 0 :(得分:1)

为什么你不只是致电[self dismissModalViewControllerAnimated:YES]。关闭模态视图控制器就足够了。

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

答案 1 :(得分:0)

我认为你从哪里调用它是关键,但你没有说这个代码在哪里。

我怀疑解雇你的parentVC导致这个代码再次被执行,这会再次尝试解除父...基本上是一个无限循环。

答案 2 :(得分:0)

感谢您的回复。

Aleksejs - 我尝试过你的建议却没有成功。谢谢你确保我已经完成了第一次明显的工作。

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

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

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

再次感谢。

答案 3 :(得分:0)

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

我是如何避免这个问题的?我花时间了解委托模式。现在,每个模态视图(Login和EULA)都显示在app delegate类中,当我对模态视图采取某些操作时,我会使用委托进行回调。

答案 4 :(得分:0)

如果self实际上没有modalViewController,则不应使用self dismissModalViewControllerAnimated。只需创建一个协议,将模态视图控制器中的消除委托给父节点。当您按下模态视图控制器时,分配代理,然后当您想要解除它时,调用[self.delegate dismissMe],然后在委托(父代)上调用[self dismissModalViewControllerAnimated:...]。

答案 5 :(得分:0)

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

而不是

[[Picker parentViewControl] dismissModalViewControllerAnimated:YES];

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

而不是

[self presentModalViewController:picker animated:YES];