我在HostViewController
中有一个视图Host.storyboard
,在情节提要中,我可以选择到AttendDetailViewController
中的Main.storyboard
。但是,我想以编程方式执行以下操作:
private func attendDetailViewControllerSegue(event: CAEvent) {
let vc = AttendDetailViewController(nibName: "AttendDetailViewController", bundle: nil)
vc.event = event
navigationController?.pushViewController(vc, animated: true)
}
但是,当我运行它时,出现以下错误:
'NSInternalInconsistencyException',原因:'无法在捆绑包中加载NIB:'NSBundle ...,名称为'AttendDetailViewController'
我已经尝试了互联网上针对此问题的所有解决方案,并且我认为这可能与视图位于不同情节提要中有关。
有没有想到如何毫无例外地进行这种搜索?
答案 0 :(得分:1)
您必须从捆绑包中获取情节提要:
var hostStoryboard = UIStoryboard(name: "Host", bundle: Bundle.main)
然后,实例化并显示视图控制器:
let someViewController = hostStoryboard?.instantiateViewController(withIdentifier: "AttendDetailViewController") as? AttendDetailViewController
self.navigationController?.present(attendDetailViewController!, animated: true)
不要忘记在情节提要中设置AttendDetailViewController
的情节提要标识符。
我还建议您在使用attendDetailViewController
之前先安全地拆开它们:
let someViewController = hostStoryboard?.instantiateViewController(withIdentifier: "AttendDetailViewController") as? AttendDetailViewController
if let vc = attendDetailViewController {
self.navigationController?.present(vc, animated: true)
}
答案 1 :(得分:0)
1-从xib加载(当您的项目中有AttendDetailViewController.xib文件时使用)
let vc = AttendDetailViewController(nibName: "AttendDetailViewController", bundle: nil)
2-从情节提要中加载(当vc在情节提要中时使用)
let vc = UIStoryboard(name: "Host", bundle: nil)!.instantiateViewController(withIdentifier: "vciD") as? AttendDetailViewController
3-以编程方式加载(以编程方式创建vc布局时使用)
let vc = AttendDetailViewController()