2016-06-21 66 views
1

我有一个嵌入导航控制器的视图控制器。在UINavigationBar上设置导航项时发生崩溃

在导航栏上,我在条的中央有一个segmentedControl,然后在右侧有一个编辑按钮。

当我点击编辑按钮,下面的代码进行烧成:

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) 

    } 

} 

(注:homeworkTasksVC被引用,因为有问题的观点是两个视图之间的UIPageViewController比开关)

问题:当我点击编辑时,分段控件切换文本标题没有任何问题,然后再次点击“编辑”再次切换回来,但是如果我点击导航到不同视图的视图中的单元格,并且然后点击'返回'返回到原始视图,然后点击编辑,即吨崩溃与下面的输出:

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 0x28263dd5 0x28262379 0x23c479e7 0x23c475d7 0x23c4593f 0x23b941c9 0x23b93fbd 0x251b0af9 0x282cc435 0xe8cb4 0x23840873) 的libC++ abi.dylib:与未捕获的异常终止键入NSException (LLDB)

回答

3

你想要什么是设置当前视图控制器上的navigationItem财产。当您在导航堆栈上推送第二个视图控制器时,UINavigationController将接管导航栏项目的管理。它可能实际上是一个错误,它在推动之前工作。

相反的:

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

请执行:

homeworkTasksVC.navigationItem = navItem

或:

self.navigationItem = navItem

哪一个挑依赖关于如何堆叠视图控制器。

+0

你能解释一下,在代码中? :)我觉得这就是我已经在做...? – Max

+0

我更新了我的答案。 – robinkunde