2017-09-28 10 views
-1

VCにセグを実行すると、UIBarButtonsが表示されます。しかし、プログラムでビューコントローラにプッシュすると、UIBarButtonsは表示されません。 iOS 9またはiOS 10にはバグはありません。UIBarButtonsがナビゲーションバーに表示されないのはなぜですか? (可能なiOS 11バグですか?)

このコードは、アプリケーションの起動時に表示される最初のビューコントローラに存在します。 UserDefaultsをチェックして、「相互作用」と呼んでいるものを復元する必要があるかどうかを確認しています。プログラムでスタックを作成しています。私はアプリケーションの状態を復元することに問題があったので、私はこのメソッドに戻りました。

override func viewDidAppear(_ animated: Bool) { 
     super.viewDidAppear(animated) 

     if UserDefaults.standard.bool(forKey: "ShouldRestoreInteraction") { 
      if 
       let uri = UserDefaults.standard.url(forKey: "InteractionObjectURI"), 
       let id = CoreDataUtils.coord.managedObjectID(forURIRepresentation: uri), 
       let interactionObject = CoreDataUtils.context.object(with: id) as? InteractionObject 
      { 
       let sb = UIStoryboard(name: "Interaction", bundle: nil) 
       let interactionCreateOrEdit = sb.instantiateViewController(withIdentifier: "InteractionUnified") as! InteractionCreateOrEdit 
       interactionCreateOrEdit.interaction = Interaction(object: interactionObject) 
       interactionCreateOrEdit.interactionObject = interactionObject 

       if UserDefaults.standard.bool(forKey: "RestoreToDashboard") { 
        // restore to dashboard 
        let sb = UIStoryboard(name: "MyDashboard", bundle: nil) 
        let dashNav = sb.instantiateInitialViewController() as! UINavigationController 
        let dashboardTVC = sb.instantiateViewController(withIdentifier: "DashboardTableViewController") 

        self.revealViewController().setFront(dashboardTVC, animated: false) 

        dashNav.pushViewController(dashboardTVC, animated: false) 
        dashNav.pushViewController(interactionCreateOrEdit, animated: false) 

        navigationController!.present(dashNav, animated: false, completion: nil) 
       } else { 
        print("Error restoring interaction - did not specify bottom controller in stack") 
       } 
      } else { 
       print("Error restoring interaction - object in core data no longer exists") 
      } 
     } 
    } 

しかし、奇妙なことは、私は「デバッグビュー階層」をクリックすると、その後、UIBarButtonsデバッグビュー階層に電話機に表示しませんが、です。プログラムの実行を続行し、Debug View Hierarchyを再度押すと、ボタンがDVHに表示されます。さらに、プログラムの実行を続行すると、UIBarButtonsがナビゲーションバーに引き続き表示されます。

+0

vC3コントローラはどこから入手できますか?あなたはそれを2回押すか、何かを押すように見えます(コードから1つ、セグから1つ)。 – kirander

+0

ボタンがナビゲーションバーに表示されないコードブロックでは、セグが実行されていません。また、バグが発生している最後のView Controllerをどのように取得しているかを示す私の質問を編集しました。 –

+0

私たち自身でこれを再現できる十分な文脈を提供する。ここには「iOS 11」のバグはありません。これは_your_バグであり、それが何であるかを見るために十分なコードを提供する必要があります。たとえば、バックグラウンドスレッドでこれをやっているかもしれませんが、あなたがどこでそれをやっているのかわからないので、伝える方法はありません。 – matt

答えて

1

マットさんが "保証"のように見えます。私のコードが以前のバージョンのiOSで動作するのはなぜか分かりません...とにかく解決策は次の通りです:

if UserDefaults.standard.bool(forKey: "RestoreToDashboard") { 
// restore to dashboard 
let sb = UIStoryboard(name: "MyDashboard", bundle: nil) 
let dashNav = sb.instantiateInitialViewController() as! UINavigationController 
let dashboardTVC = sb.instantiateViewController(withIdentifier:"DashboardTableViewController") 
dashNav.setViewControllers([dashboardTVC, interactionCreateOrEdit], animated: false) 
self.revealViewController().setFront(dashNav, animated: false) 
} 
関連する問題