2017-09-25 71 views
3

我已經更新到最新的xcode - 9和iOS 11,現在我面臨UIApplicationState問題。任何人都可以告訴我爲什麼蘋果在ApplicationState中做了這些更改。爲什麼在iOS 11中,我的UIApplicationState顯示爲非活動狀態而不是活動狀態?

例如: 期間的viewController viewWillAppear中,我檢查UIApplicationState:

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

但我正在逐漸applicationState = UIApplicationStateInactive。

或者我需要通過額外的代碼爲iOS版本11分別處理:

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

任何其他的答案始終保持在所有版本的應用程序的狀態?

由於提前,

+0

同樣的事情發生在這裏 – Jacky

回答

2

** 修訂ANSWER **

我用下面的代碼來既在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 

我不能告訴你,如果這是有意還是無意的,但有些事情肯定改變。也許在它上面有一個雷達?

+0

我試圖檢查UIApplicationState在viewDidAppear,不太可能我仍然只是「UIApplicationStateInactive」而不是活動狀態。 –

+0

@AbilashBNair用示例代碼更新了答案。 – CodeBender

相關問題