2017-09-25 2 views
3

私は最新のxcode - 9とiOS 11にアップデートしました。今はUIApplicationStateの問題に直面しています。 appleが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

** UPDATED ANSWER **

Iは両方の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

私はviewDidAppearでUIApplicationStateをチェックしようとしましたが、おそらくアクティブ状態ではなく "UIApplicationStateInactive"しか得られません。 –

+0

@AbilashBNairサンプルコードで答えを更新しました。 – CodeBender

関連する問題