【问题标题】:Open the last opened view controller when closing and opening the app关闭和打开应用时打开最后打开的视图控制器
【发布时间】:2017-10-22 23:47:32
【问题描述】:

我希望能够在我的应用上关闭并重新打开同一个视图控制器。我想这样做的原因是因为我有一个“教程”场景,我只想在你第一次打开应用程序时被提出。每隔一次我希望应用程序立即打开第二个视图控制器。这是我的代码:

对于 GameViewController:

   UserDefaults.standard.set(0, forKey: "View")

对于 GameViewController2:

   UserDefaults.standard.set(1, forKey: "View")

对于 AppDelegate:

     func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions:
    [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    let viewCount = UserDefaults.standard.integer(forKey: "View")
    var VC = UIViewController()
    let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    print(viewCount)
    if viewCount == 0 {
        //FirstView should initiate
        VC = storyboard.instantiateViewController(withIdentifier: "First") as! GameViewController
    } else {
        //SecondView should inititate
        VC = storyboard.instantiateViewController(withIdentifier: "Second") as! GameViewController2
    }

    self.window?.makeKeyAndVisible()
    self.window?.rootViewController = VC


    return true
}

问题是每次我打开应用程序时,它总是在我的第一个视图控制器而不是我的第二个视图控制器上启动。任何帮助将不胜感激。

【问题讨论】:

  • 我会改变你的流程。让游戏始终是第一个视图控制器,如果键不存在,请使用弹出窗口来展示您的教程

标签: ios swift sprite-kit


【解决方案1】:

根据上面的代码,你没有调用 UserDefaults.synchronize

var userDefaults = UserDefaults.standard
userDefaults.set(1, forKey:"View")
userDefaults.synchronize()

在这两种情况下都必须同步,因为这会将更改保存到磁盘

更新:正如@cs4alhaider 所指出的,Swift 4 中不需要 synchronize(),所以这个问题不会再发生了。

【讨论】:

  • userDefaults.synchronize() 在 swift 4 及更高版本中不需要
  • 谢谢,因为它是原始问题解决方案的关键,所以我添加了一个脚注。
猜你喜欢
  • 2012-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多