2012-10-23 61 views
0

你好,謝謝大家。我有一個表格視圖,允許用戶切換到分區視圖。所有的標準視圖都很好,但是當用戶切換到剖視圖時,我試圖用(-commitEditingStyle :)函數刪除一行時崩潰。我在這個功能中缺少什麼?當它被分割時,我應該如何刪除一行? (I從一個plist中wchich是陣列的字典加載我表的每個索引是在tableview中的行。)如何在使用部分時編輯(即刪除行)uiTableView?

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if ([strTitle isEqualToString:@"sectionView"]) { 

     @try { 


     if (editingStyle == UITableViewCellEditingStyleDelete) { 
      // Delete the row from the data source. 
      // NSMutableDictionary *book =[[NSMutableDictionary alloc]init]; 
      NSMutableDictionary *mynewList = [[NSMutableDictionary alloc]init]; 
      mynewList = [[self.TitleDis valueForKey:[[[self.TitleDis allKeys] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)] objectAtIndex:indexPath.section]] objectAtIndex:indexPath.row]; 
      NSMutableArray *sectionRow = [mynewList objectForKey:@"Dis"]; 


      [sectionRow removeObjectAtIndex:indexPath.row]; 

      [mynewList writeToFile:[self dataFilePath] atomically:YES]; 

      // 
      [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 

     } else if (editingStyle == UITableViewCellEditingStyleInsert) { 
      // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view. 
     } 
     } 
     @catch (NSException *exception) { 
      NSLog(@"hello error...%@",exception); 
     } 



    } 

    else { 
    /////////////////////// STANDARD VIEW 

    if (editingStyle == UITableViewCellEditingStyleDelete) { 
     // Delete the row from the data source. 
     [distribArray removeObjectAtIndex:indexPath.row]; 
     // 
     //  NSMutableArray *contents = [[NSMutableArray alloc] init]; 
     //  [contents addObject:myMasterList]; 
     //  //[contents addObject:[NSArray arrayWithObjects:arraydata.text,distroName.text,destorEmail.text, nil]]; 

     [distribArray writeToFile:[self dataFilePath] atomically:YES]; 

     // 
     [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 

    } else if (editingStyle == UITableViewCellEditingStyleInsert) { 
     // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view. 
    } 
     ////////////////////////////////// 
    } 
} 

CONSOLE: - [__ NSCFString removeObjectAtIndex:]:無法識別的選擇發送到實例0xe4bd3f0

正如你所看到的,我一直在玩格式....不知道接下來要嘗試什麼?謝謝。

我的意思切片:enter image description here

+0

「分段視圖」是什麼意思?你的意思是表格視圖的分組樣式? – Tobi

回答

0

這裏有兩個問題。下面的行會產生泄漏,不應以這種方式使用。

NSMutableDictionary *mynewList = [[NSMutableDictionary alloc]init]; 
      mynewList = [[self.TitleDis valueForKey:[[[self.TitleDis allKeys] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)] objectAtIndex:indexPath.section]] objectAtIndex:indexPath.row]; 

取而代之的是,你可以把它看成,

NSMutableDictionary *mynewList = [[self.TitleDis valueForKey:[[[self.TitleDis allKeys] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)] objectAtIndex:indexPath.section]] objectAtIndex:indexPath.row]; 

另一件事是,

[mynewList objectForKey:@"Dis"];並不總是一個數組,它有時也來爲字符串。檢查你的數據結構並確認它是否是一個數組。

嘗試這樣,

id obj = [mynewList objectForKey:@"Dis"]; 
NSLog(@"%@", [[obj class] description]); 

和檢查什麼是NSLog印刷的obj的數據類型。確認它是NSMutableArray而不是NSString

+0

'mynewList'不應該像OP那樣被引用和重新分配。但是,如果使用ARC進行編譯,不會造成內存泄漏。 (並且我假設ARC,因爲代碼中沒有單個保留或釋放。) –

+0

是的,如果使用ARC,則爲true。但是,第一行沒有任何意義。他可以直接分配它。但我不確定在這個代碼中是否使用了ARC。這只是一個非常普通的評論。 – iDev

0

因此對於一個,你得:

NSMutableDictionary *mynewList = [[NSMutableDictionary alloc]init]; 
mynewList = [[self.TitleDis valueForKey:[[[self.TitleDis allKeys] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)] objectAtIndex:indexPath.section]] objectAtIndex:indexPath.row]; 

你在哪裏allocing mynewList,然後立即將其覆蓋。

但我想你應該在調試器中檢查sectionRow的類型。我的猜測是它是一個NSString。

如果不瞭解更多關於數據結構的信息,很難分辨出發生了什麼。

相關問題