为什么断言失败 - [UISectionRowData refreshWithSection:tableView:tableViewRowData:]?

时间:2013-03-20 11:42:06

标签: iphone uitableview

 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];

}

我没有得到这个问题?

4 个答案:

答案 0 :(得分:8)

检查tableView:heightForRowAtIndexPath:。也许你会返回类似NaN / +inf / -inf而非高度的内容。那是我的错误。

请记住,doublefloat类型除以零并不是崩溃:

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];看起来像垃圾值。确保它已初始化。