关闭和打开应用时打开最后打开的视图控制器
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 之间传递数据?