我正在尝试检测这是否是用户第一次访问并显示欢迎屏幕,如果是这样的话,但我似乎无法让它工作,我不确定我做错了什么。我在这里查看了一些建议并跟着他们,我认为我理解了这个概念,但我无法让它发挥作用。
即使我尝试删除模拟器中的所有内容和设置,我也会直接发送到ViewController。
任何想法我做错了什么?任何提示将不胜感激。
以下是代码:
func下的AppDelegate didFinishLaunchingWithOptions
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()
}
}
答案 0 :(得分:0)
首次安装应用时,您的任何UserDefaults键都没有值。所以当你这样做时:
var ud = UserDefaults.standard.bool(forKey: "UDisFirstVisit")
在不存在的UDisFirstVisit
密钥上,您将返回false
。
来自bool(forKey:)
的文档:
与指定键关联的布尔值。如果指定的键不存在,则此方法返回false。
您有两种选择。
UDhasVisited
键设置为true
。启动时,如果是false
,则显示欢迎屏幕。将以下行添加到didFinishLaunchingWithOptions
:
UserDefaults.standard.register(defaults: [ "UDisFirstVisit": true ])
选择其中一个(不是两个)。
答案 1 :(得分:0)
只需追溯你想象中的动作。用户第一次运行应用程序时会发生什么?
var ud = UserDefaults.standard.bool(forKey: "UDisFirstVisit")
嗯,用户默认值没有进入任何条目。因此ud
不是true
,因为它不是任何 - 它不存在!所以它是false
。因此,您的欢迎视图控制器永远不会被看到。
改变你的逻辑。首先询问密钥"UserHasSeenWelcome"
是否 false 。如果是,请显示欢迎v.c.并将密钥设置为true
。