Assertion failure in -[UISectionRowData refreshWithSection:tableView:tableViewRowData:], /SourceCache/UIKit/UIKit-2380.17/UITableViewRowData.m:400
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason:'Failed to allocate data stores for 997008923 rows in section 0. Consider using fewer rows'
我的代码
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [appDelegate.purchaseArray count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
return cell;
}
-(void)viewWillAppear:(BOOL)animated
{
[cartTbl reloadData];
}
我没有得到这个问题?
答案 0 :(得分:8)
检查tableView:heightForRowAtIndexPath:
。也许你会返回类似NaN
/ +inf
/ -inf
而非高度的内容。那是我的错误。
请记住,double
和float
类型除以零并不是崩溃:
double d = 5.0;
double r = d/0.0;
所以这可以帮到你:
if (isnan(r) || isinf(r)) {
// ...
}
答案 1 :(得分:5)
我在-[UISectionRowData refreshWithSection:tableView:tableViewRowData:]
也失败了。在我的情况下,它是由于设置太小estimatedRowHeight
而导致使用:
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
用于自动调整tableView的单元格。
将estimatedRowHeight
设置为2.0
而不是1.0
解决了问题。
答案 2 :(得分:1)
出于不同的原因,我有这样的错误。 我的应用程序工作正常,当我决定在我的视图模型中更改某些内容(我将表绑定到的对象)。我删除了一个属性,并重新编译。突然,应用程序抛出了这个错误。
事实证明,仍然存在对编译器未捕获的代码中的已删除属性的引用。我已经多次清理和重建了,编译器从未发现我错过的错误。
重新启动xcode导致构建失败,现在突出显示了违规行作为错误。一旦我解决了这个问题,一切都很好。
如果你遇到这样的错误访问错误,并在调试器中看到奇怪的东西,比如应该分配给其他属性的值的属性,那么你可能会有一个错误,应该让你的构建不能编译xcode就是没有别忘了。重启可能会解决它 - 值得一试。
答案 3 :(得分:0)
return [appDelegate.purchaseArray count];
看起来像垃圾值。确保它已初始化。