我是一个编程新手,如果这表明我的无知,那就很抱歉......
情况1:
情况2:
在情境2中,我希望我的程序只是从头开始加载,而是在崩溃之前返回到它被“冻结”的页面。
为什么会这样?
编辑 - 这是崩溃的回溯。我已经完成了我的应用程序的完全干净安装,没有数据,从你看到的第一个屏幕,将变量保持在最低限度:
#0 0x96dc009a in mach_msg_trap ()
#1 0x96dc0807 in mach_msg ()
#2 0x0111cd86 in __CFRunLoopServiceMachPort ()
#3 0x01079e74 in __CFRunLoopRun ()
#4 0x01079840 in CFRunLoopRunSpecific ()
#5 0x01079761 in CFRunLoopRunInMode ()
#6 0x01c821c4 in GSEventRunModal ()
#7 0x01c82289 in GSEventRun ()
#8 0x001c4c93 in UIApplicationMain ()
#9 0x00002429 in main (argc=1, argv=0xbffff050) at main.m:14
答案 0 :(得分:5)
从评论中复制,因为这个理论似乎是正确的:你是否在运行Xcode调试器?可能是当您终止应用程序时,调试器会阻止进程被完全销毁,从而导致后续启动时崩溃。如果您最初从模拟器而不是通过Xcode的调试器启动应用程序,它显然可以正常工作。
答案 1 :(得分:1)
当您的应用从App Switcher终止时,它会调用您的应用代理的applicationDidEnterBackground:(UIApplication *)application
方法。在这里,您应该保存所有应用程序状态 - 您的应用程序使用的所有内存都将被释放。可能发生的事情是applicationDidEnterBackground:
方法中的某些内容崩溃或者对象模型的大规模解除分配导致崩溃。
修改强>
我只是重读了你的问题,发现它正在崩溃重新启动。抱歉。您还应该检查application:didFinishLaunchingWithOptions:
是否有崩溃,因为在您的应用首次启动时会调用该崩溃。虽然你在应用程序关闭之前就看到了最后一个屏幕,但崩溃似乎仍然可能与终止有关。
如何获得回溯:
如果您在模拟器中运行代码并在Xcode中调试并重现此崩溃,您应该能够发现哪条线路崩溃了。当调试器接收崩溃并且gdb打开时(您应该在Xcode中看到(gdb)
提示符),键入bt
并按Enter以查看崩溃的回溯。将其粘贴在这里。
See the docs of UIApplicationDelegate了解applicationWillTerminate:
的更多信息。
答案 2 :(得分:1)
我有同样的问题。由于某种原因,模拟器阻止我们杀死我们正在测试的应用程序。 我为测试做的一件事是创建一个虚拟项目 如果从另一个虚拟项目启动模拟器。 然后我可以在原始项目中打开/关闭/终止测试通知等。
答案 3 :(得分:1)
拔掉手机,是的。调试器GDB是导致此问题的原因。