在我的代码中,我需要浏览导航层次结构,这就是我在UIViewController
中有UINavigationController
的原因。
如果用户在单元格上标记并且有下一级别,我会再次创建相同的UIViewController
并将其推送到UINavigationController
。这很好。
但是当我到达层次结构的末尾并尝试performSegueWithIdentifier
时,要转到其他控制器查看详细信息,应用程序崩溃并说
*** Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: 'Receiver (<myproject.MenuController: 0x7fb2e0ea9ef0>)
has no segue with identifier 'showDetail''
但是我检查了InterfaceBuilder,一切都很好。 有趣的是,如果我不推动下一级导航并直接对新控制器执行segue,那么一切运行良好。
我也尝试推送新控制器,就像我正在使用导航一样,但是它尝试访问新的控制器委托,奇怪的是nil
并崩溃。
有人知道怎么做吗?
完整代码(在MenuContoller中)
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath){
//self.performSegueWithIdentifier("showDetail", sender: self)
let clickedCell = self.tableViewItems[indexPath.row]
print("Selected \(clickedCell.itemID)")
// Check if subview has children, then we push a deeper level on the navigation controller
if (menuItems.filter{$0.parentID == clickedCell.itemID}.count > 0) {
let subNavigationController = MenuController()
// Set the currentNavigationItemID for the new view controller
subNavigationController.currentNavigationItemID = clickedCell.itemID
subNavigationController.title = clickedCell.itemDisplayName
self.navigationController?.pushViewController(subNavigationController, animated: true)
} else {
// Load new Controller to show details
self.performSegueWithIdentifier("showDetail", sender: self)
// let subNavigationController = ProductListViewController()
// subNavigationController.currentCategoryID = clickedCell.itemID
// self.navigationController?.pushViewController(subNavigationController, animated: true)
}
答案 0 :(得分:2)
问题是您的MenuController
尚未从故事板创建,因此它没有附加任何segue。
您需要让故事板创建MenuController
,而不是:
let subNavigationController = MenuController()
你需要:
let subNavigationController = self.storyboard?.instantiateViewControllerWithIdentifier("menuControllerID")
要使其正常工作,必须在 Identity Inspector 中为"menuControllerID"
MenuController
设置情节提要ID。