【问题标题】:ViewController not changing after first time useViewController 在第一次使用后没有改变
【发布时间】: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
    }

【问题讨论】:

    标签: ios swift userdefaults


    【解决方案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
    猜你喜欢
    • 2014-08-23
    • 2021-10-30
    • 2017-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-12
    • 2019-09-05
    • 1970-01-01
    相关资源
    最近更新 更多