关闭和打开应用时打开最后打开的视图控制器

Posted

技术标签:

【中文标题】关闭和打开应用时打开最后打开的视图控制器【英文标题】: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

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

【问题讨论】:

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

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

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

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

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

【讨论】:

userDefaults.synchronize() 在 swift 4 及更高版本中不需要 谢谢,因为它是原始问题解决方案的关键,所以我添加了一个脚注。

以上是关于关闭和打开应用时打开最后打开的视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

关闭所有打开的视图控制器的单个函数

关闭删除多个视图

swift 4 中使用 performSegue 打开的关闭页面时,如何在视图控制器和 TableViewController 之间传递数据?

当点击 FCM 推送通知时,如何在选项卡栏中打开特定的视图控制器?

从后台打开应用程序时不调用 ViewDidAppear

从打开的导航抽屉呈现视图控制器时挂起