参考以下问题:iPhone: How do I detect when an app is launched for the first time?
当我查找NSUserDefaults苹果引用时,它说registerDefaults
不会将数据存储到磁盘上。在上面的问题中,应用会在每次发布时将值firstLaunch
注册到YES
。因此,每次启动应用时,firstLaunch
都会被覆盖到YES
,因此应用会始终认为这是应用的首次启动。
我是对的吗?
编辑:
在完成上述教程后所说的内容时,它并不总是有效。我继续从Xcode重新启动,并在第一次启动时不断打印1
bool值。
答案 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。