如何检测应用程序的首次启动

时间:2015-08-21 00:18:59

标签: ios iphone swift

我一直在研究这个问题2个小时,我发现了一个非常类似的问题,Zaid Pathan回答了这个问题。不幸的是,当我使用Zaid在我自己的应用程序中共享的代码时,我没有得到我期望的结果。这是代码:

     override func viewDidLoad() {
    super.viewDidLoad()

    println("Launched")

    func isAppAlreadyLaunchedOnce()->Bool{
        let defaults = NSUserDefaults.standardUserDefaults()

        if let isAppAlreadyLaunchedOnce = defaults.stringForKey("isAppAlreadyLaunchedOnce"){
            println("App already launched")
            return true
        }else{
            defaults.setBool(true, forKey: "isAppAlreadyLaunchedOnce")
            println("App launched first time")
            return false
        }
    }

我添加了println("Launched"),因此我可以在日志中看到代码已执行。这样可行。但是,println("App already launched")和/或println("App launched first time")不会执行。有什么建议吗?

3 个答案:

答案 0 :(得分:2)

Yo在功能中创建了功能。移动范围中的isAlreadyLaunchedOnce(与viewDidLoad处于同一级别)并从viewDidLoad调用它或修改代码如下:

override func viewDidLoad() {
super.viewDidLoad()

println("Launched")

let defaults = NSUserDefaults.standardUserDefaults()
if let isAppAlreadyLaunchedOnce = defaults.stringForKey("isAppAlreadyLaunchedOnce"){
    println("App already launched")
    // do something
} else {
    defaults.setBool(true, forKey: "isAppAlreadyLaunchedOnce")
    println("App launched first time")
    // do something
}

}

答案 1 :(得分:1)

您应该调用synchronize()将数据保存到userdefaults。

defaults.setBool(true, forKey: "isAppAlreadyLaunchedOnce")
defaults.synchronize()

答案 2 :(得分:1)

您可以使用以下方法首次识别天气应用luanch。

目标C

    if ([self isFirstLuanch]) {
        NSLog(@"First lunch");
    }else{
        NSLog(@"No a first lunch");
    }

    -(BOOL) isFirstLuanch{
        if (![[NSUserDefaults standardUserDefaults] boolForKey:@"HasLaunchedOnce"]){
            return NO;
        }else{
            [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"HasLaunchedOnce"];
            [[NSUserDefaults standardUserDefaults] synchronize];
            return YES;
        }
    }

适用于swift 4.0

if isFirstLuanch(){
       print("First lunch")
}else{
       print("No a first lunch")
}

func isFirstLuanch()-> Bool{
    if UserDefaults.standard.bool(forKey: "isAppAlreadyLaunchedOnce") {
        return false
    }else{
        UserDefaults.standard.set(true, forKey: "isAppAlreadyLaunchedOnce")
        return true
    }
}