选择器视图上的断言失败
Posted
技术标签:
【中文标题】选择器视图上的断言失败【英文标题】:Assertion failure on picker view 【发布时间】:2012-09-22 05:53:50 【问题描述】:滚动带有零数据(零行)的选择器视图时出现断言失败。在滚动选择器视图时,我遇到了这个崩溃。在 ios 6 上测试
* -[UITableViewRowData rectForRow:inSection:] 中的断言失败,/SourceCache/UIKit_Sim/UIKit-2372/UITableViewRowData.m:1630
* 由于未捕获的异常 'NSInternalInconsistencyException' 导致应用程序终止,原因:'request for rect at 无效的索引路径(2 个索引 [0, 0])'
任何帮助都是可观的。
【问题讨论】:
这实际上是在大家开始更新到 iOS6 时才出现的。在 iOS 发布之前,与此相关的崩溃为零。 我可以确认这只是 iOS 6。 iOS 5 不会因选择器视图为空而崩溃。 唷。啊哈..我想知道为什么我们的应用程序突然开始崩溃。感谢以上评论者的关注! 【参考方案1】:我也有同样的问题
我不知道为什么会这样,
但它可以在 ios6 中修复(它在 ios5 中的工作原理我没有检查):
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
if ([self getCount] == 0)
return 1;
return [self getCount];
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent: (NSInteger)component reusingView:(UIView *)view
if ([self getCount] == 0)
return nil;
【讨论】:
成功了,谢谢...很奇怪,我想知道这是否是框架中的错误 它必须是……当它为空时必须返回 1 似乎很奇怪 @iWasRobbed 你有机会为此提交错误报告吗? 这个技巧并没有解决我的应用程序中的崩溃问题。我的解决方案是在数据源为空时不显示pickerview。 由于使行数始终至少为 1,您可能会产生副作用。因此,或者,您也可以在数据更新代码中使用 picker.userInteractionEnabled=NO 或 YES。【参考方案2】:答案其实很简单!在我自己遇到了一些麻烦之后,我发现您必须将委托和数据源设置为选择器视图连接到的视图控制器。
【讨论】:
没有委托和数据源,它永远不会进入它的委托方法。以上是关于选择器视图上的断言失败的主要内容,如果未能解决你的问题,请参考以下文章
将选择器添加到动态添加的 UIScrollView 视图上的按钮