2012-01-13 43 views
3

我需要你的幫助:(錯誤而刪除從我的UITableView一節

我工作的一個iPhone應用程序中,我不得不刪除在一個UITableView一些行和部分。

我上的Xcode 4

我我的tableView與NSArray的和字典相關聯,就像這樣:

NSMutableArray *arrTemp1 = [[NSMutableArray alloc] 
         initWithObjects:@"Chris",nil]; 

    NSMutableArray *arrTemp2 = [[NSMutableArray alloc] 
         initWithObjects:@"Bianca",nil]; 

    NSMutableArray *arrTemp3 = [[NSMutableArray alloc] 
         initWithObjects:@"Candice",@"Clint",@"Chris",nil]; 

    NSMutableArray *arrTemp4 = [[NSMutableArray alloc] 
           initWithObjects:@"Candice",@"Clint",@"Chris",nil]; 

    NSMutableArray *arrTemp5 = [[NSMutableArray alloc] 
           initWithObjects:@"Candice",@"Clint",@"Chris",nil]; 

    NSMutableArray *arrTemp6 = [[NSMutableArray alloc] 
           initWithObjects:@"Candice",@"Clint",@"Chris",nil]; 

    NSMutableDictionary *temp = [[NSMutableDictionary alloc] 
         initWithObjectsAndKeys:arrTemp1,@"A",arrTemp2, 
           @"B",arrTemp3,@"C",arrTemp4, @"D", arrTemp5, @"E", arrTemp6, @"J",nil]; 
    self.tableContents = temp; 
    self.sortedKeys =[[self.tableContents allKeys] 
         sortedArrayUsingSelector:@selector(compare:)]; 

當我需要刪除的行或我使用這個代碼sectionm - >

(void)tableView:(UITableView *)tableView 
commitEditingStyle:(UITableViewCellEditingStyle)editingStyle 
forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    if (editingStyle == UITableViewCellEditingStyleDelete) 
    { 
     NSMutableArray *listData = [self.tableContents objectForKey: 
          [self.sortedKeys objectAtIndex:[indexPath section]]]; 
     NSUInteger row = [indexPath row]; 

     [listData removeObjectAtIndex:row]; 

     [tableView beginUpdates]; 


     if ([listData count] > 0) 
     { 
      // Section is not yet empty, so delete only the current row. 
      [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] 
          withRowAnimation:UITableViewRowAnimationFade]; 
     } 
     else 
     { 
      // Section is now completely empty, so delete the entire section. 
      [tableView deleteSections:[NSIndexSet indexSetWithIndex:indexPath.section] 
        withRowAnimation:UITableViewRowAnimationFade]; 
     } 

     [tableView endUpdates]; 
    } 
} 

當我刪除行,它的工作原理以及.. 當我刪除的部分,我發現了以下錯誤: 「*在斷言失敗 - [UITableView的_endCellAnimationsWithContext:]/SourceCache/UIKit/UIKit-1912.3/UITableView.m:1030 2012-01-13 16:42:45.261 *終止應用程序由於未捕獲的異常'NSInternalInconsistencyException',原因:'無效的更新:節數無效。更新後的表視圖中包含的節數(6)必須等於更新前的表視圖中包含的節數(6),加上或減去插入或刪除的節數(0插入,1刪除)。'」

(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return [tableContents count]; // tableContent is a NSMUtableDictionnary* 
} 

- (NSInteger)tableView:(UITableView *)table 
numberOfRowsInSection:(NSInteger)section 
{ 
    NSArray *listData =[self.tableContents objectForKey: 
         [self.sortedKeys objectAtIndex:section]]; 
    return [listData count]; 
} 

我越來越瘋狂,並即將在計算器上尋求幫助......

(對不起,我的英文不好:()

感謝大家閱讀並回答!!

+0

也許你需要刪除th e行在刪除部分之前?胡亂猜測。 – ksol 2012-01-13 15:55:31

+0

我已經試過了。和以前的錯誤是一樣的,但這一次,它說,行數改變 – user1147981 2012-01-13 16:00:39

回答

2

它看起來像你不是實際刪除的,當它不包含任何對象的空數組字典的鍵,因此您要

 // Section is now completely empty, so delete the entire section. 
     [tableView deleteSections:[NSIndexSet indexSetWithIndex:indexPath.section] 
       withRowAnimation:UITableViewRowAnimationFade]; 
通話

導致的問題,因爲你仍然有像以前一樣的部分(字典鍵)數量...

+0

所以我也刪除字典中? – user1147981 2012-01-13 16:17:56

+1

是removeobjectforkey應該做到這一點 – 2012-01-13 16:58:04

1

嘗試交換這兩行:

[listData removeObjectAtIndex:row]; 

[tableView beginUpdates]; 

所以它應該是:

[tableView beginUpdates]; 

[listData removeObjectAtIndex:row]; 
+0

不工作:(總是相同的錯誤,部分。 – user1147981 2012-01-13 16:08:45