我如何知道我的应用程序在 Swift 中是从啥状态启动的

Posted

技术标签:

【中文标题】我如何知道我的应用程序在 Swift 中是从啥状态启动的【英文标题】:How Do I Tell What State My Application Is Being Launched From In Swift我如何知道我的应用程序在 Swift 中是从什么状态启动的 【发布时间】: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 并在下次启动时相应地启动。此处的解决方案 (***.com/questions/19452696/…) 建议检查屏幕亮度,但它不再起作用了,一开始就是一个 hack。 【参考方案1】:

只是对正确答案的图形添加:

from apple developer documentation

【讨论】:

【参考方案2】:

这就是application:didFinishLaunchingWithOptions:applicationDidBecomeActive: 的区别。

application:didFinishLaunchingWithOptions: 仅在应用程序开始新时调用。

applicationDidBecomeActive: 将在应用再次从后台变为活动状态时被调用。 注意applicationDidBecomeActive: 在首次启动时也会被调用。如果您需要区分这两种情况,则必须使用application:didFinishLaunchingWithOptions:。您可以设置一个局部变量来跟踪它是否是第一次启动。

【讨论】:

注意:如果您的应用被 iOS 杀死,它仍然会出现在 BG 中,但也会启动(而不仅仅是激活)。

以上是关于我如何知道我的应用程序在 Swift 中是从啥状态启动的的主要内容,如果未能解决你的问题,请参考以下文章

斯威夫特:我的班级的啥实例在视图中

如何使用 Swift 创建 JSON Codable [关闭]

如何在swift 3中恢复标签可见性状态

如何使 PHFComposeBarView 控件在 Swift iOS 应用程序中变为活动状态?

Swift - 如何实现登录/会话(无代码)

如何在swift中逐渐隐藏状态栏