使用NSUserDefaults检测应用程序的初始启动

时间:2011-08-11 09:21:00

标签: iphone objective-c ios cocoa-touch nsuserdefaults

参考以下问题:iPhone: How do I detect when an app is launched for the first time?

当我查找NSUserDefaults苹果引用时,它说registerDefaults不会将数据存储到磁盘上。在上面的问题中,应用会在每次发布时将值firstLaunch注册到YES。因此,每次启动应用时,firstLaunch都会被覆盖到YES,因此应用会始终认为这是应用的首次启动。

我是对的吗?

编辑:

在完成上述教程后所说的内容时,它并不总是有效。我继续从Xcode重新启动,并在第一次启动时不断打印1 bool值。

4 个答案:

答案 0 :(得分:5)

registerDefaults:不会覆盖默认值中的内容,但会设置默认值为默认值。因此,如果缺少默认值,则使用默认默认值。令人困惑,不是吗?

如果您从未在密钥FirstLaunch下写入值,则boolForKey:@"FirstLaunch"将使用registerDefaults:中的值。但是,如果您之前执行setBool:NO forKey:@"FirstLaunch"并稍后再次使用boolForKey:再次询问,则不会使用registerDefaults:中的值。

答案 1 :(得分:1)

registerDefaults:不会覆盖现有值,它只会初始化尚未设置为任何值的值。

答案 2 :(得分:0)

中尝试这样的事情
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

if ([[[NSUserDefaults standardUserDefaults] valueForKey:@"firstRun"] intValue]==0) {
       //do the stuff required at first launch


//after stuff done
    [[NSUserDefaults standardUserDefaults] setValue:[NSNumber numberWithInt:1] forKey:@"firstRun"];
    [[NSUserDefaults standardUserDefaults] synchronize];

    }

}

答案 3 :(得分:-1)

否首先它将为n然后将其设置为yes并在将其设置为yes之前检查它是否已设置为yes。因此,如果您获得密钥的内容,userDefaults将首次返回nil。喜欢

[[NSUserDefaults standardUserDefaults] valueForKey:@"FirstLaunch"]; 
首次启动应用程序时,

将返回nil。