【发布时间】:2014-07-12 16:35:08
【问题描述】:
我想根据我的应用是从后台启动还是启动但不在后台执行不同的操作。根据我的阅读,这可以在
func application(application: UIApplication!, willFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool
功能。我可以通过以下方式确定应用程序是否首次启动:
if NSUserDefaults.standardUserDefaults().boolForKey("FirstLaunch") == true
{
NSUserDefaults.standardUserDefaults().setBool(false, forKey: "FirstLaunch")
NSUserDefaults.standardUserDefaults().synchronize()
println("false")
}
else
{
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "FirstLaunch")
NSUserDefaults.standardUserDefaults().synchronize()
println("true")
}
但我无法确定应用程序从什么状态变为活动状态。
更新
我把功劳归功于 Drewag,因为你让我走上了正轨。你在 didFinishLaunchingWithOptions 上是正确的。
好的,在测试了您的一些建议后,它似乎是这样工作的:
如果应用程序被打开,无论它是否在后台触发:
applicationDidBecomeActive
所以那个没有帮助。但是,当我启动应用程序并且它不在后台时,这似乎是唯一一次触发:
didFinishLaunchingWithOptions
willFinishLaunchingWithOptions
当应用程序在以下三种情况中的任何一种在后台打开时:
1.) 双击主页按钮并选择应用程序窗口 2.) 单击跳板中的应用程序图标 3.) 从 UILocalNotification 点击打开应用程序
这会触发:
applicationWillEnterForeground
【问题讨论】:
-
我不知道这是否可能,或者至少自 iOS 5 以来还没有。也许有一种方法可以确定导致应用退出的原因(主页或锁定按钮)?如果你发现了这个,你可以将它保存到 NSUserDefaults 并在下次启动时相应地启动。此处的解决方案 (stackoverflow.com/questions/19452696/…) 建议检查屏幕亮度,但它不再起作用了,一开始就是一个 hack。