2011-10-16 80 views
2

我想从委托方法外部的UITableview中删除一行。我在单击表格单元格内的按钮并尝试删除该方法内部的行时调用方法。 这里是我使用从UITableView删除行外部TableView委托

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中执行此操作? 谢谢

回答

1

根本问题是这种方法:

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

必须返回正确的行数,它不是。当您从deleg.rmessages中删除该项目时,这是用于提供上述方法的返回值的相同对象吗? (?喜欢的东西[deleg.rmessages count]

而且,在我的经验,除了经常给你更多的细节,特别是:

  1. 有多少人加入之前,有多少项目有/删除
  2. 它有多少期望有与它多少呢有重装后

你看到像这样的东西拜因克提到?如果是这样,那么值得在你的问题中包括。

旁注:

这是一个坏主意,依靠:

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

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

3

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

+0

+1 - 当出现问题并且我的数据源实际上并未删除该项目时,我得到了该异常,然后当调用reloaddata时,表中的项目数量与我的数据源中的项目数量不一致。 – bryanmac