2017-06-09 117 views
0

我希望我的警报只在第一次在新设备上启动应用程序时打开,但每次应用程序在多任务中关闭并重新打开时都会打开。如果有人能够帮忙,我已附上我的代码?每次都会打开警报,而不仅仅是第一次

override func viewDidAppear(_ animated: Bool) { 
     // alert first time app is opened 
     // making of alert 

     let alert = UIAlertController(title: "Navigation", message: "Tap Right Hand Side of Screen For Next Quote, Left Hand Side To Go Back", preferredStyle: UIAlertControllerStyle.alert) 

     //add ok button 
     alert.addAction(UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.default, handler: nil)) 

     // detect if first launch 
     let launchedBefore = UserDefaults.standard.bool(forKey: "launcedBefore") 
     if launchedBefore { 
     } 
     else { 
      self.present(alert, animated: true, completion: nil) 
      UserDefaults.standard.set(true, forKey: "launchedBefore") 
     } 
    } 
+0

viewDidAppear不是正确的地方。 –

+0

@ElTomato它绝对是正确的地方。 – Sulthan

+2

这应该教会你使用字符串的常量。 ''launchBefore“'vs'”launcedBefore“'。 – Sulthan

回答

0

有一个在你的钥匙错字......虽然写它使用的是关键launchedBefore但当读它使用的是launcedBefore

+0

谢谢。这固定了我的问题 – iasla

0

这就是为什么我讨厌使用UserDefaults的原因。有时候你会犯错,而且你不知道它发生了什么。

使用UserDefaults最好的方法是创建所有键进入常数,所以你的两行访问UserDefaults看起来更整洁这样的:

let launchedBefore = UserDefaults.standard.bool(forKey: kLaunchedBeforeKey) 

UserDefaults.standard.set(true, forKey: kLaunchedBeforeKey) 

这样,编译器会让你知道如果你犯了一个错字。

+2

那么,使用'UserDefaults'的最好方法是将它们包装到一个自定义类中,例如'MySettings',它具有属性而不是文本键。文本键的使用应保存在一个文件中。 – Sulthan

+0

是的,我同意!我最近开始这样做。 – TawaNicolas

相关问题