【问题标题】:Why in iOS 11, my UIApplicationState show as inactive state instead of active?为什么在 iOS 11 中,我的 UIApplicationState 显示为非活动状态而不是活动状态?
【发布时间】:2017-09-25 13:50:28
【问题描述】:

我已更新到最新的 xcode - 9 和 iOS 11,现在我在 UIApplicationState 中遇到问题。谁能告诉我为什么苹果在 ApplicationState 中做了这些改变。

例如: 在 viewController viewWillAppear 期间,我正在检查 UIApplicationState:

     UIApplicationState applicationState = [UIApplication sharedApplication].applicationState;
        if (applicationState == UIApplicationStateActive)
        {
        }

但我得到 applicationState = UIApplicationStateInactive。

或者iOS 11版本需要额外代码单独处理:

  if (applicationState == UIApplicationStateActive || (@available(iOS 11, *) && applicationState == UIApplicationStateInactive)){
}

在所有版本中保持一致的应用程序状态的任何其他答案?

提前致谢,

【问题讨论】:

  • 同样的事情发生在这里
  • 您是否考虑订阅来自NotificationCenter 的事件?它允许在应用更改其状态时立即做出反应。

标签: ios objective-c ios11 uiapplication


【解决方案1】:

** 更新答案 **

我使用以下代码在 iOS 10 和 iOS 11 设备上测试状态。

import UIKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        print("\(#function) active: \(UIApplication.shared.applicationState == .active)")
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        print("\(#function) active: \(UIApplication.shared.applicationState == .active)")
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        print("\(#function) active: \(UIApplication.shared.applicationState == .active)")

        DispatchQueue.main.asyncAfter(deadline: .now() + 0.25) {
            print("\(#function) with delay active: \(UIApplication.shared.applicationState == .active)")
        }
    }
}

在 iOS 10 上运行时:

viewDidLoad() active: false
viewWillAppear active: false
viewDidAppear active: true // This differs from 11
viewDidAppear with delay active: true

在 iOS 11 上运行时:

viewDidLoad() active: false
viewWillAppear active: false
viewDidAppear active: false
viewDidAppear with delay active: true

我不能告诉你这是不是故意的,但肯定有一些变化。或许可以在上面设置一个雷达?

【讨论】:

  • 我尝试在 viewDidAppear 中检查 UIApplicationState,不太可能我仍然只得到“UIApplicationStateInactive”而不是 Active 状态。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-13
  • 2020-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多