2016-06-21 4 views
1

ナビゲーションコントローラに埋め込まれたビューコントローラがあります。UINavigationBarでナビゲーション項目を設定するとクラッシュする

ナビゲーションバーには、バーの中央にsegmentedControlがあり、右側に編集ボタンがあります。

I編集ボタンをタップすると、次のコードが発射される:

func editAction() { 

    if homeworkTasksVC?.editing == false { 

     // Set to editing 
     homeworkTasksVC?.setEditing(true, animated: true) 

     // Switch to "Done" button and 'Homework' title without segmented control 
     let navBar = self.navigationController?.navigationBar 
     let navItem = UINavigationItem(title: "Homework") 

     let doneButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Done, target: self, action: #selector(TasksParentViewController.editAction)) 
     navItem.rightBarButtonItem = doneButton 

     navBar!.setItems([navItem], animated: true) 


    } else { 

     // Stop editing 
     homeworkTasksVC?.setEditing(false, animated: true) 

     // Switch back to "Edit" button and segmented control 
     let navBar = self.navigationController?.navigationBar 
     let navItem = UINavigationItem(title: "Homework") 
     navItem.titleView = segmentControl 

     let editButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Edit, target: self, action: #selector(TasksParentViewController.editAction)) 
     navItem.rightBarButtonItem = editButton 

     navBar!.setItems([navItem], animated: true) 

    } 

} 

(注:問題のビューは、2つのビュー間のスイッチよりUIPageViewControllerあるためhomeworkTasksVCが参照される)

PROBLEM :編集をタップすると、分割されたコントロールが問題なくテキストタイトルを切り替えるので、別のビューにナビゲートするビュー内のセルをタップすると、「編集」をもう一度タップするとすべてが正常に切り替わります。BUTこの元のビューに戻るには「戻る」をタップし、その後、「編集」をタップします。 tは次の出力でクラッシュ:

2016年6月22日00:38:59.272 2.0 [1504:386949] *終了アプリによるキャッチされない例外に 'NSInternalInconsistencyException'、理由:「setItemsを呼び出すことはできません:アニメーション:コントローラーによって管理されているUINavigationBarで直接実行できます。 *まずスローコールスタック: (0x23c85b0b 0x23442dff 0x23c85a51 0x283a0ced 0x118318 0x1189c8 0x2829b6a1 0x2841e0b9 0x2829b6a1 0x2829b631 0x2828356b 0x28283697 0x2829af51 0x2829abbf 0x28293547 0x28262379 0x28263dd5 0x23c479e7 0x23c475d7 0x23c4593f 0x23b941c9 0x23b93fbd 0x251b0af9 0x282cc435 0xe8cb4 0x23840873) のlibC++ abi.dylib:のキャッチされない例外で終了NSException (lldb)を入力

答えて

3

何が欲しいのは、現在のビューコントローラ上のnavigationItemプロパティを設定することです。ナビゲーションスタック上で2番目のビューコントローラを押すと、UINavigationControllerがナビゲーションバー項目の管理を引き継ぎます。実際には、プッシュ前に動作するバグかもしれません。

homeworkTasksVC.navigationItem = navItem

か:どちらか

navBar!.setItems([navItem], animated: true)

を行います

の代わりに迎えに1

self.navigationItem = navItem

が依存あなたのView Controllerを積み重ねる方法について

+0

コードで説明できますか? :)私はそれが私がすでにやっているような気がします...? – Max

+0

答えを更新しました。 – robinkunde

関連する問題