从TableView Delegate外部的UITableView中删除行

时间:2011-10-16 13:30:22

标签: iphone ios uitableview nsindexpath

我正在尝试从委托方法之外的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中这样做? 感谢

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分: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?)这只是问题的一部分。