2011-10-16 81 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