UITableView 和 numberOfRowsInSection 崩溃

Posted

技术标签:

【中文标题】UITableView 和 numberOfRowsInSection 崩溃【英文标题】:UITableView and numberOfRowsInSection crash 【发布时间】:2010-07-05 10:09:16 【问题描述】:

尝试从 UITableView 中删除行时遇到问题: UITableView 从 NSMutableArray 中获取行数:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 

return [alertsArray count];

我以这种方式将对象添加到 NSMutableArray:

- (void)saveButton:(id)sender 
[alertsArray addObject:
[self.tableView reloadData];

使用此代码,我允许删除行:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 

if (editingStyle == UITableViewCellEditingStyleDelete) 
    // Delete the row from the data source.
    [self.tableView deleteRowsAtIndexPaths:[NSMutableArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
    [alertsArray removeObjectAtIndex:indexPath.row];
    [tableView reloadData];
   
else if (editingStyle == UITableViewCellEditingStyleInsert) 
    // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view.
   

由于某种原因,当尝试删除行时,应用程序崩溃了。

谢谢!

【问题讨论】:

【参考方案1】:

你应该只做

if (editingStyle == UITableViewCellEditingStyleDelete) 
    // Delete the row from the data source.
    [alertsArray removeObjectAtIndex:indexPath.row];
    [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
 

也就是说,先修正你的模型,然后然后调用deleteRowsAtIndexPaths:

您会在控制台窗口中找到相应的错误消息,顺便说一句。

另外,一般来说这里不需要使用reloadData,当你没有改变其他东西的时候。

【讨论】:

澄清一下,这是因为 tableView 删除了行,然后检查它的数据源以确保它返回的行数小于删除前的行数。如果返回的行数等于删除前的行数,就会崩溃。

以上是关于UITableView 和 numberOfRowsInSection 崩溃的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 数据源方法的奇怪行为

如果目标 c 的 uitableview 中没有新行,如何停止滚动 uitableview?

如何在ios的UITableview中聚焦最后一个单元格

当每个部分的行数不同时,如何获取 numberOfRows 的计数?

MappedByteBuffer - BufferOverflowException

向量的初始化很慢