【问题标题】:Saving state of application in ios using Swift使用 Swift 在 ios 中保存应用程序的状态
【发布时间】:2016-07-26 05:59:38
【问题描述】:

我的应用程序中有四个视图控制器。现在让我们假设用户当前在第二个 viewController 上并且他终止了应用程序。

现在我怎样才能保存这个状态,这样当用户重新打开应用程序时,他应该看到第二个 viewContoller,并且应该能够导航回第一个 viewContoller。

我想到的解决方案是简单地将当前屏幕的变量保存在 userDefaults 中,然后将该 viewController 设为 rootViewController。但我知道这不是正确的解决方案,我也会失去导航。 请指导我,谢谢。

【问题讨论】:

  • 我建议写一个NSURLNSUserDefaults,它与任何导航控制器路径相匹配,详细说明如何到达当前状态。
  • @AbhiBeckert 你能在回答中详细描述一下吗?
  • 我没有时间写一个完整的答案,也许你可以这样做?但例如在音乐应用程序中,URL 可能是 https://my-music-app.com/playlists/playlist-name/song-name 以显示特定歌曲的“正在播放”控制器,返回按钮将您带到包含该歌曲的播放列表,另一个返回按钮将您带到列表播放列表。此 URL 可用于其他用途,例如应用程序中的共享按钮。对于没有安装应用程序的用户,您可能还有一个实际的 Web 服务器也可以处理 URL。
  • 很抱歉,我无法理解这一点。谁能写一个详细的答案。

标签: ios swift state-saving


【解决方案1】:

如果您还没有,请创建一个名为 BaseViewController 的类,该类应从您的所有 UIViewController 中扩展:

class BaseViewController: UIViewController {

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)

        // always remember last controller shown
        NSUserDefaults.standardUserDefaults.setObject(classForCoder(), forKey: "lastController")
    }
}

您可以保存控制器类名、int 标识符或您想要的东西。 然后,在应用程序启动时的应用程序委托中,您可以读取此值并使您的自定义逻辑打开正确的控制器。

if NSUserDefaults.standardUserDefaults().stringForKey("lastController") == MyCustomViewController.classForCoder() {
    // open MyCustomViewController
}

然后当用户返回时,根据您的应用流程重定向到正确的 UIViewController。

【讨论】:

    猜你喜欢
    • 2011-09-16
    • 2013-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-09
    • 1970-01-01
    相关资源
    最近更新 更多