模态展示含容器视图的ViewController时UITableView崩溃问题排查
崩溃原因
这个错误的核心逻辑很直白:UITableViewController要求其根视图必须是UITableView(或其子类)。
UITableViewController的loadView方法有内置校验:如果是从Storyboard加载控制器,它会检查根视图是否为UITableView;如果不是,就会抛出这个一致性异常。你的报错里提到的控制器UIViewController-OSu-KC-K41(也就是BroadcastSearchResultsTableViewController对应的Storyboard场景),它的根视图肯定是普通的UIView或者其他非表格视图,违反了这个规则。
修复步骤
只需要调整Storyboard里的视图配置即可,步骤如下:
- 打开
Main.storyboard,找到标识为UIViewController-OSu-KC-K41的控制器场景(也就是BroadcastSearchResultsTableViewController对应的页面) - 删除当前的根视图(如果是普通
UIView的话) - 从右侧组件库拖入一个
UITableView,设置它为该控制器的根视图,并且添加约束让它填满整个控制器的view - 确认该控制器的Class已经正确设置为
BroadcastSearchResultsTableViewController,同时检查容器视图的Embed Segue是否正确关联到这个表视图控制器 - 重新编译运行,崩溃问题应该就能解决
是否需要调整设计?
目前的设计是合理的:用普通UIViewController承载搜索栏、分段控件等交互元素,内嵌UITableViewController专门负责展示列表数据,符合单一职责原则,代码拆分清晰。
如果后续需要更灵活的布局(比如搜索结果区域要和其他视图做复杂联动),可以考虑把BroadcastSearchResultsTableViewController改成UIViewController+UITableView的组合模式,但当前场景下,保持现有设计完全没问题,只要修复Storyboard的视图配置即可。
内容的提问来源于stack exchange,提问作者Ezra Henley
相关产品推荐
相关产品推荐

