我正在尝试从委托方法之外的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中这样做? 感谢
答案 0 :(得分:3)
您的问题是,删除单元格后,填充表的数据与表格不一致。执行此操作后,请确保dataSource方法提供正确的数据(例如,如果它是用于填充表的对象数组,则必须从数组中删除对象)
答案 1 :(得分:1)
根本问题是这个方法:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
必须返回正确的行数,而不是。从deleg.rmessages
中删除项目时,这是否与用于提供返回值的对象相同以上方法? (像[deleg.rmessages count]
?)
此外,根据我的经验,异常通常会为您提供更多详细信息,特别是:
你是否看到过这样的提及?如果是这样,那么值得在你的问题中加入。
<强>旁注:强>
依靠:
是一个坏主意UITableViewCell *buttonCell = (UITableViewCell*)[[btn superview] superview];
要返回UITableViewCell
。您似乎将按钮的tag
分配给局部变量,但从不使用它。 (也许这将是存储UITableViewCell索引的好地方,然后将单元格子类化以维持按钮的ivar?)这只是问题的一部分。