代码之家  ›  专栏  ›  技术社区  ›  Luke

iPad间歇性冻结

  •  2
  • Luke  · 技术社区  · 14 年前

    我有一个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 回复  |  直到 14 年前
        1
  •  0
  •   M. Ryan    14 年前

    “退出应用程序和再次打开应用程序”之间有很大的区别,在上下文中,这意味着您做得相当快并且“等待一两分钟”。

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

    这可能是因为您的应用程序没有完全释放并关闭线程,因此当您再次快速启动它时,线程会恢复(在3.2或更早版本上,由于它已经开始自我关闭,因此将不稳定)。

    做一些计时…看看“IT崩溃”和“它起作用”的阈值是什么。如果超过10秒,我会说有问题。不到这个,你就可以看到我刚才描述的,

        2
  •  1
  •   badweasel    14 年前

    我将查看初始化代码、loadView、didfindishingslaunch等中发生了什么,并跟踪它。很容易让3或4个方法深入其中,并且在其中一些方法应该是懒惰的时候做得太多。如果没有更多的信息或任何示例代码,那都是胡乱猜测。一个这样的猜测是用户默认值还是您从前面的文件或字典加载的任何内容?我可以看到那里的东西是如何在几个状态中循环的。

        3
  •  0
  •   davbryn    14 年前

    连接设备后,从xcode以调试模式运行应用程序,然后退出应用程序。现在,断开USB电缆,再次运行你的应用程序-它完全冻结了吗?如果旋转设备,视图方向是否会改变?一旦应用程序终止,请重新插入USB并转到xcode->窗口->管理器。

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

    我曾经有过一个类似的问题,当我在可执行文件中将nszombieEnabled作为活动参数时,这也值得研究。