在启用画外音时尝试加载原型单元时遇到问题。应用程序崩溃,我收到错误
Assertion failure in -[UITableView _createPreparedCellForGlobalRow:withIndexPath:]
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:'
仅当VoiceOver开启时才会发生这种情况,否则应用程序运行正常。有什么帮助吗?
答案 0 :(得分:0)
我不确定我是不是偶然得到了这个,但这对我有用。在UITableViewDataSource
:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
[...]
UITableViewCell *standardCell;
if (UIAccessibilityIsVoiceOverRunning()) {
standardCell = [tableView dequeueReusableCellWithIdentifier:@"VO Cell"];
} else {
standardCell = [tableView dequeueReusableCellWithIdentifier:@"Regular Cell"];
}
//Configure the cell
[...]
return standardCell;
}
我认为,如果出于性能原因关闭VoiceOver,iOS会缓存没有辅助功能属性的Cell。因此,您使用的默认标识符可能与没有这些属性的缓存单元格相关。当VoiceOver打开并且iOS尝试将这些单元格出列时,它不会在那里找到属性并中断。通过使用不同的标识符,可以在启用VO时强制iOS缓存新的单元格。
再一次,这只是我正在做的一个假设,但是当我以这种方式将Cell排队时,我不会遇到这个问题。但是,如果你按照我提到的方式对它们进行出列,你必须注意可能出现的错误:
如果要将其标识符设置在.xib文件或故事板中的单元格出列,如下图所示,则必须使用VO重用标识符设置另一个原型单元格。