2

我正在尝试从委托方法之外的 UITableview 中删除一行。当我单击表格单元格内的按钮并尝试删除该方法内的行时,我正在调用一个方法。这是我正在使用的功能

UIButton *btn = (UIButton*)sender;
int tag = btn.tag;
UITableViewCell *buttonCell = (UITableViewCell*)[[btn superview] superview];
NSIndexPath *indexPath = [self.msgTbl indexPathForCell:buttonCell];
[deleg.rmessages removeObjectAtIndex:buttonRow];
[self.msgTbl deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationTop];NSInteger buttonRow = indexPath.row;
[self.msgTbl reloadData];

使用这一行或两行会被删除,但之后它会崩溃并给出异常

删除前后的行数必须相同

我怎么能在ios中做到这一点?谢谢

4

2 回答 2

3

您的问题是用于填充表格的数据在删除单元格后与表格不一致。确保您的 dataSource 方法在执行此操作后提供正确的数据(例如,如果它是用于填充表的对象数组,则还必须从数组中删除该对象)

于 2011-10-16T13:35:00.840 回答
1

根本问题是这种方法:

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

必须返回正确的行数,但不是。当您从 中删除项目时deleg.rmessages,这是否与用于提供上述方法的返回值的对象相同?(有点像[deleg.rmessages count]?)

此外,根据我的经验,异常通常会为您提供更多详细信息,特别是:

  1. 之前有多少物品
  2. 添加/删除了多少
  3. 它期望有多少与重新加载后它确实有多少

你看到有人提到过这样的事情吗?如果是这样,那么值得将其包括在您的问题中。

边注:

依赖以下内容是个坏主意:

UITableViewCell *buttonCell = (UITableViewCell*)[[btn superview] superview];

要返回UITableViewCell. 您似乎将tag按钮的 分配给局部变量,但从不使用它。(也许这将是存储 UITableViewCell 的索引的好地方,然后子类化单元格以维护按钮的 ivar?)这只是问题的一部分。

于 2011-10-16T13:40:09.490 回答