2012-10-31 8 views
11

W końcu wyśledziłem dziwną katastrofę. Jest to spowodowane wywołaniem tableView:commitEditingStyle:forRowAtIndexPath: przy użyciu indeksu IndexPath nil. Ale jak to może być?W jaki sposób tableView: commitEditingStyle: forRowAtIndexPath: można wywołać z zerem indexPath?

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (editingStyle == UITableViewCellEditingStyleDelete) { 
     // DEBUG 
     if (indexPath == nil) { 
      NSLog(@"Deleting row at nil indexPath in %@", self); 
     } 
     [self deleteItemAtIndexPath:indexPath fromTableView:tableView]; 
    } 
} 

Oto ślad stosu:

6 XXX  -[ListViewController tableView:commitEditingStyle:forRowAtIndexPath:] (ListViewController.m:427) 
7 UIKit -[UITableView(UITableViewInternal) animateDeletionOfRowWithCell:] + 85 
8 UIKit -[UIApplication sendAction:to:from:forEvent:] + 73 
9 UIKit -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 31 
10 UIKit -[UIControl sendAction:to:forEvent:] + 45 
11 UIKit -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 503 
12 UIKit -[UIApplication sendAction:to:from:forEvent:] + 73 
13 UIKit -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 31 
14 UIKit -[UIControl sendAction:to:forEvent:] + 45 
15 UIKit -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 503 
16 UIKit -[UIControl touchesEnded:withEvent:] + 489 
17 UIKit -[UIWindow _sendTouchesForEvent:] + 525 
18 UIKit -[UIApplication sendEvent:] + 381 
19 UIKit _UIApplicationHandleEvent + 6155 
20 GraphicsServices _PurpleEventCallback + 591 
21 CoreFoundation __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15 
22 CoreFoundation __CFRunLoopDoSources0 + 213 
23 CoreFoundation __CFRunLoopRun + 647 
24 CoreFoundation CFRunLoopRunSpecific + 357 
25 CoreFoundation CFRunLoopRunInMode + 105 
26 GraphicsServices GSEventRunModal + 75 
27 UIKit UIApplicationMain + 1121 
28 XXX  main (main.m:16) 
29 XXX  start + 40 
+0

Czy masz ślad stosu pokazując gdzie wywołanie pochodzi? – rmaddy

+0

Dodałem ślad stosu. – an0

+0

Mam ten sam błąd IndexPath, ale z innym śladem stosu. Czy udało Ci się rozwiązać problem? – sergtk

Odpowiedz

-1

Wyjątkiem jest ze względu na obecność danych o indeksie ale indexPath już usunięte. Musisz usunąć obiekt tablicy w indeksie.

Spróbuj wykonać następujące czynności:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
     if (editingStyle == UITableViewCellEditingStyleDelete) 
     { 
     [self deleteItemAtIndexPath:indexPath fromTableView:tableView]; 
     NSMutableArray * tempArray = [yourDataArray mutableCopy]; 
     [tempArray removeObjectAtIndex: indexPath.row]; 
     yourDataArray = tempArray; 
     [tableView reloadData]; 
     } 
    } 
Powiązane problemy