在iPad上间歇性冻结

时间:2010-07-13 16:56:38

标签: iphone objective-c ipad

我有一个iPad应用程序,第一次构建和运行完美。但是,如果我退出应用程序并再次打开它,界面完全没有响应。如果我退出并打开另一个时间,它永远不会超过启动画面。

奇怪的是,如果我在再次打开之前等待一两分钟,它总是可以正常运行。

关于可能发生的事情或我应该开始调试工作的任何想法?我会抛出断点并看看发生了什么,但是当我第二次启动应用程序时,调试器已经退出。有没有办法通过多次执行应用程序来保持调试器和控制台的运行?

谢谢,

编辑:这是我用于NSUserDefaults的一些代码 - 这可能是问题吗?

在我的主视图控制器的viewDidLoad中:

bgnum = [prefs integerForKey:@"bgnum"];
menuVisible = [prefs boolForKey:@"menuVisible"];
songTitles = [[NSMutableArray alloc] initWithArray:[prefs arrayForKey:@"songTitles"]];
numberOfSongs = [prefs integerForKey:@"numberOfSongs"];

viewWillDisappear

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

[prefs setBool:menuVisible forKey:@"menuVisible"];
[prefs setInteger:bgnum forKey:@"bgnum"];
[prefs setObject:songTitles forKey:@"songTitles"];
[prefs setInteger:numberOfSongs forKey:@"numberOfSongs"];

[prefs synchronize];

3 个答案:

答案 0 :(得分:1)

我会查看初始化代码,loadView,didFinishLaunching等中发生的情况,并将其追踪出来。很容易在这些东西中获得3或4种方法,并且当其中一些方法应该是懒惰的时候做得太多。随着更多的信息或任何示例代码,这是所有疯狂的猜测。一个这样的猜测是用户默认值或您从前面的文件或字典加载的任何内容?我可以看到那些东西可以循环通过几个州。

答案 1 :(得分:0)

连接设备后,从xCode以调试模式运行应用程序,然后退出应用程序。现在,断开USB电缆并再次运行您的应用程序 - 它是完全冻结的吗?如果您旋转设备,您的视图方向是否会发生变化?应用程序终止后,重新插入USB并转到xCode-> Window-> Organizer。

您应该会在屏幕左侧看到您的iPad设备。选择它,您应该会看到右侧的一些选项卡,用于控制台和崩溃报告。从下拉列表中选择您的应用程序,并查看是否已记录任何控制台消息,或者是否发生了崩溃 - 如果确实存在应该帮助的话,您应该获得堆栈跟踪。

当我在我的可执行文件中使用NSZombieEnabled作为活动参数时,我曾遇到过类似的问题,所以这也值得研究。

答案 2 :(得分:0)

“退出应用程序并再次打开它”之间存在很大差异,这在上下文中意味着您正在快速完成并“等待一两分钟”。

我开发了一个相当大的应用程序,通常需要几秒钟才能在iPad上“卸载”,导致我快速退出并重新进入,导致应用程序出现在部分配置状态,导致异常行为。

这可能是因为你的应用程序没有完全释放并关闭它的线程,因此当你再次快速启动它时,线程会恢复(并且在3.2或更早版本,因为它已经开始自杀了。)

做一些时间......看看“崩溃”和“它有效”的阈值是什么。如果它超过10秒,那么我会说出错了。不到这一点,你可以看到我刚刚描述的内容,