ViewController 在第一次使用后没有改变

Posted

技术标签:

【中文标题】ViewController 在第一次使用后没有改变【英文标题】:ViewController not changing after first time use 【发布时间】:2018-07-31 20:51:25 【问题描述】:

您好,我只想在第一次使用时显示视图控制器(即:有人第一次启动应用程序时,再也不会)。

我认为我的代码是正确的,但由于某种原因它无法正常工作。有谁知道为什么?

AppDelegate.swift

import UIKit
import CoreData

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate 
    var window: UIWindow?
    let userDefaults = UserDefaults.init()

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 
        userDefaults.set(true, forKey: "isFirstTime")
        userDefaults.set("RealmNotChosenOrSuggested", forKey: "RegionPreference")
        userDefaults.set([], forKey: "PreferredRealms")

        // Not using Storyboard instantiation code
        window = UIWindow(frame:UIScreen.main.bounds) //canvas
        window?.makeKeyAndVisible()

        if (userDefaults.bool(forKey: "isFirstTime"))
            userDefaults.set(false, forKey: "isFirstTime")
            window?.rootViewController = StartupViewController()
         else
            window?.rootViewController = DashboardViewController()
        
        return true
    

StartupViewController.swift

class StartupViewController: UIViewController 
    override func viewDidLoad() 
        super.viewDidLoad()
        view.backgroundColor = .white
    

DashboardViewController.swift

import UIKit

class DashboardViewController: UIViewController 
    override func viewDidLoad() 
        super.viewDidLoad()
        view.backgroundColor = .blue
    

【问题讨论】:

【参考方案1】:

因为每次应用程序打开此运行时,您都会覆盖第一行中的密钥 isFirstTime

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 
  //  userDefaults.set(true, forKey: "isFirstTime") // firs line comment it


if !(userDefaults.bool(forKey: "isFirstTime"))
    userDefaults.set(true, forKey: "isFirstTime")
    userDefaults.set("RealmNotChosenOrSuggested", forKey: "RegionPreference")
    userDefaults.set([], forKey: "PreferredRealms")
    window?.rootViewController = StartupViewController()
 else
    window?.rootViewController = DashboardViewController()

【讨论】:

当您从默认值中读取密钥时,任何布尔值的默认值为 false

以上是关于ViewController 在第一次使用后没有改变的主要内容,如果未能解决你的问题,请参考以下文章

viewcontroller 放在前屏后没有切换到横向模式

如何在没有委托的情况下以模态方式呈现 ViewController,然后在 ViewController 被解除后运行回调函数/块?

PHP一个修改没有改完紧接着又查询一次,导致数据重复

导航到另一个ViewController后没有获取Tabbar

从第二个 ViewController 回到第一个 ViewController

iOS8中设备旋转后的ViewController偏移量