【发布时间】:2014-11-09 16:19:26
【问题描述】:
我想在用户第一次打开我的应用程序时显示一个欢迎屏幕。有什么方法可以在 Swift 中检查应用的首次启动?
【问题讨论】:
我想在用户第一次打开我的应用程序时显示一个欢迎屏幕。有什么方法可以在 Swift 中检查应用的首次启动?
【问题讨论】:
您可以在任何地方使用它来验证用户是否是第一次看到此视图。
func isAppAlreadyLaunchedOnce() -> Bool {
let defaults = UserDefaults.standard
if let _ = defaults.string(forKey: "isAppAlreadyLaunchedOnce") {
print("App already launched")
return true
} else {
defaults.set(true, forKey: "isAppAlreadyLaunchedOnce")
print("App launched first time")
return false
}
}
注意:用户重新安装应用并首次启动后,此方法将返回false。
【讨论】:
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
}
}
【讨论】:
由于卸载应用时会删除应用的 NSUserDefaults,因此您可以尝试在应用启动时测试某个值是否存在。
如果该值存在,则该应用已安装。如果不是,这是应用程序第一次启动,您需要设置该值。
【讨论】:
斯威夫特:
let launchedBefore = UserDefaults.standard.bool(forKey: "launchedBefore")
if launchedBefore {
print("Not first launch.")
} else {
print("First launch, setting UserDefault.")
UserDefaults.standard.set(true, forKey: "launchedBefore")
}
目标 - C:
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"isAppAlreadyLaunchedOnce"])
{
return true;
}
else
{
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"isAppAlreadyLaunchedOnce"];
[[NSUserDefaults standardUserDefaults] synchronize];
return false;
}
【讨论】:
-[NSUserDefaults synchronize]。来自Apple's documentation“这个方法是不必要的,不应该使用。”
我经常发现userDefault 无法访问,因为我的应用程序中有一些bugs for Apples data protection 政策,所以我改变了我的策略以检测以下首次启动
if ( fileExists( dummyFilePath ) == NO ) {
createFileAt( dummyFilePath )
// This is first launch
}
【讨论】:
斯威夫特 5
let launchedBefore = UserDefaults.standard.bool(forKey: "launchedBefore")
if launchedBefore {
// Code if has launched before
} else {
UserDefaults.standard.set(true, forKey: "launchedBefore")
// Code if not has launched before
}
【讨论】:
Objective-C 版本的Jon Shier's answer:
BOOL isAppLaunched = [[NSUserDefaults standardUserDefaults] boolForKey:@"launchedBefore"];
if (isAppLaunched) {
NSLog(@"Not first launch.");
}
else {
NSLog(@"First launch, setting NSUserDefault.");
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"launchedBefore"];
}
【讨论】:
对Jonas Deichelmann's的回答稍作语义修改,澄清几点:
打印语句清楚地表明,此功能仅验证自上次安装以来它是否已运行,而不是它是否曾在此设备上运行过。
func establishUserDefaultsHaveBeenVerifed()->Bool{
let defaults = UserDefaults.standard
if let _ = defaults.string(forKey: "userDefaultsHaveBeenVerified"){
print("user defaults were already verified")
return true
}else{
defaults.set(true, forKey: "userDefaultsHaveBeenVerified")
print("verified user defaults for first time since app was installed")
return false
}
}
【讨论】: