Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone dismissModalViewControllerAnimated:在模拟器中崩溃,但在手机上没有_Iphone - Fatal编程技术网

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

Iphone dismissModalViewControllerAnimated:在模拟器中崩溃,但在手机上没有,iphone,Iphone,我正在做以下工作: [self.parentViewController dismissModalViewControllerAnimated:YES] 此代码在使用模拟器时失败,但在手机上不会出现任何问题。模拟器控制台显示无错误。我使用NSLog语句确定这行代码是罪魁祸首。但是,当在手机上运行时,控制台(窗口>管理器)显示已执行上述代码,并且应用程序可以顺利运行 在调试器中运行代码时,以下语句出现在Xcode调试窗口的底部: GDB:数据格式化程序暂时不可用,将在“继续”后重试。(此时调

我正在做以下工作:

[self.parentViewController dismissModalViewControllerAnimated:YES]  
此代码在使用模拟器时失败,但在手机上不会出现任何问题。模拟器控制台显示无错误。我使用NSLog语句确定这行代码是罪魁祸首。但是,当在手机上运行时,控制台(窗口>管理器)显示已执行上述代码,并且应用程序可以顺利运行

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

然后一个窗口显示:加载43672个堆栈帧。(听起来很糟糕)

在调试窗口中,以下行多次出现: [UIView(层次结构)\u makeSubtreePerformSelector:withObject:withObject:copySublayers:]

在不深入我的代码的情况下,有人知道或有过这种情况的经验吗


谢谢

我认为您从哪里调用此代码是关键,但您没有说此代码在哪里


我怀疑解聘父VC会导致此代码再次被执行,从而再次尝试解聘父VC。。。基本上是一个无限循环。

为什么不直接调用
[self dismissModalViewControllerAnimated:YES]
。关闭模态视图控制器就足够了


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

谢谢你的回答

我试过你的建议,但没有成功。谢谢你确保我先做了显而易见的事情

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

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

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


再次感谢。

更新-我没有解决问题,而是通过重新构建东西来避免它。之前,在ApplicationIDFinishLaunching:中,我提供了一个登录视图控制器作为模式视图。然后我需要显示一个EULA视图控制器,这样用户就可以同意一些合法的东西。我认为我的问题是,我将EULA视图作为登录视图(也是模态)的模态来呈现。我认为,情态动词出现/消失的顺序是问题所在(正如progrmr所怀疑的)


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

如果self实际上没有modalViewController,则不应使用self dismissModalViewControllerAnimated。只需创建一个协议,将从模态视图控制器中删除的对象委托回父对象。当您按下模式视图控制器时,分配代理,然后当您想要解除代理时,调用[self.delegate dismissMe],这反过来调用代理(父级)上的[self dismissModalViewControllerAnimated:…]

而不是

[[Picker parentViewControl] dismissModalViewControllerAnimated:YES];
[self presentModalViewController:picker animated:YES];

[self presentViewController:picker animated:YES completion:nil];
而不是

[[Picker parentViewControl] dismissModalViewControllerAnimated:YES];
[self presentModalViewController:picker animated:YES];

@乔恩:如果你的问题得到了一个解决问题的答案,如果你点击复选标记接受它,那就太好了。