当前位置:  开发笔记 > IOS > 正文

状态还原仅在连接到Xcode时有效

如何解决《状态还原仅在连接到Xcode时有效》经验,为你挑选了1个好方法。

我有一个运行计时器的应用程序,即使该应用程序退出或手机已关闭,计时器也应保持运行。所以我正在尝试使用shouldSaveApplicationStateshouldRestoreApplicationState。我将这两种方法都添加willFinishLaunchingWithOptions到了appDelegate中,并为涉及的每个视图控制器,导航控制器和标签栏控制器设置了恢复ID。然后在视图控制器上,我要还原,我这样做:

override func encodeRestorableStateWithCoder(coder: NSCoder) {
    coder.encodeObject(startDate, forKey: "startDate")
    coder.encodeObject(startTime, forKey: "startTime")
    coder.encodeObject(elapsedTime, forKey: "elapsedTime")
    coder.encodeObject(playing, forKey: "playing")
    coder.encodeObject(timerLabel.text, forKey: "timerLabelText")
    super.encodeRestorableStateWithCoder(coder)
}

override func decodeRestorableStateWithCoder(coder: NSCoder) {
    startDate = coder.decodeObjectForKey("startDate") as! NSDate
    startTime = coder.decodeObjectForKey("startTime") as! NSTimeInterval
    elapsedTime = coder.decodeObjectForKey("elapsedTime") as! NSTimeInterval
    playing = coder.decodeObjectForKey("playing") as! Bool
    timerLabel.text = (coder.decodeObjectForKey("timerLabelText") as! String)
    super.decodeRestorableStateWithCoder(coder)
}

override func applicationFinishedRestoringState() {
    if playing {
        elapsedTime += startDate.timeIntervalSinceNow
        play()
    }
}

现在这是奇怪的部分。当我的手机连接到Xcode时,我使用Xcode的播放和停止按钮启动和退出应用程序,一切正常。但是,当我尝试将手机与Xcode断开连接时,即使我根本没有设置状态恢复,该应用程序也会完全忽略它,只显示第一个视图控制器。而且我什至无法调试,因为当我将手机连接到Xcode时,它可以正常工作。同一件事在模拟器上发生。如果我使用Xcode的按钮,则恢复正常。如果我只是从模拟器本身打开和关闭应用程序,则不会。

有任何想法吗?



1> Nicolas Miar..:

当用户从多任务菜单主动“杀死”您的应用程序时,状态恢复将不起作用。仅当系统在后台静默杀死您的应用以回收资源(例如,内存)时,它才起作用。

理由(以下是我自己的推测/解释)是,状态恢复的全部目的是让用户在上次离开应用程序时返回到该应用程序,仿佛它从未被终止(从用户的角度出发)观点)。

但是,如果用户明确杀死该应用程序,则意味着他们不希望它“在离开时仍在运行”。

资料来源: Apple的这部分文档指出:

当用户强行退出应用程序时,系统会自动删除该应用程序的保留状态。安全关闭后,删除应用程序时删除保留的状态信息。(为安全起见,如果应用在启动过程中两次崩溃,系统也会删除保留的状态。)如果要测试应用恢复状态的能力,则不应在调试过程中使用多任务栏杀死应用。而是使用Xcode杀死应用程序,或通过安装临时命令或手势以按需调用exit的方式以编程方式终止应用程序。

从Xcode杀死应用程序(“停止按钮”)将复制“非用户启动的终止”,因此它遵守状态保存/恢复流程。


如果您访问https://developer.apple.com/downloads/(并登录),搜索“还原”,您会发现一堆调试工具,包括可以在设备上安装以启用状态的配置文件即使您直接杀死该应用程序也可以恢复。无需每次都重新启动。如果您正在寻找更多详细信息,那么您可能会对这个演示感兴趣:https://github.com/shagedorn/StateRestorationDemo。它包括代码,还包括许多幻灯片和说明,包括。调试技巧。
推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有