我一直在研究这个问题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")
不会执行。有什么建议吗?
答案 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
}
}