我正在尝试检测这是否是用户的首次访问,如果是这种情况,则显示一个欢迎屏幕,但是我似乎无法使其正常工作,而且我不确定自己做错了什么。我查看了这里的一些建议并按照建议进行了操作,以为我理解了这个概念,但是我无法使它起作用。

即使我尝试擦除模拟器中的所有内容和设置,我也被直接发送到ViewController。

有什么想法我做错了吗?任何提示将非常感谢。

这是代码:

func didFinishLaunchingWithOptions下的AppDelegate

    self.window = UIWindow(frame: UIScreen.main.bounds)

    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    var vc: UIViewController?
    var ud = UserDefaults.standard.bool(forKey: "UDisFirstVisit")

    if ud == true {
        print("This is the user's first visit")
        vc = storyboard.instantiateViewController(withIdentifier: "Welcome_01")
    } else if ud == false {
        print ("This is NOT the user's first visit")
        vc = storyboard.instantiateInitialViewController()!
    }


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

    return true


Welcome_01(欢迎VC)

import UIKit

var isFirstVisit = true

class Welcome_01: UIViewController {

    @IBAction func finishedwelcome(_ sender: Any) {
        isFirstVisit = false
        UserDefaults.standard.set(isFirstVisit, forKey: "UDisFirstVisit")
    }
    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }


UIViewController(应该在第一次访问后显示的VC)。

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

}

最佳答案

只需在您的想象中跟踪动作即可。用户第一次运行应用程序时会发生什么?

var ud = UserDefaults.standard.bool(forKey: "UDisFirstVisit")


好吧,用户默认值从未被输入过。所以ud不是true,因为它不是任何东西-它不存在!所以是false。因此,您的欢迎视图控制器从未被看到。

只是扭转你的逻辑。首先询问键"UserHasSeenWelcome"是否为假。如果是,请显示欢迎函。并将密钥设置为true

09-28 07:08