2010-11-22 2 views
1

Wenn ich eine Zeile mit CommitEditingStyle aus UITableView lösche, stürzt meine App mit der folgenden Fehlermeldung ab. obwohl das Seltsame ist, ich bin das Löschen von Abschnitt 3. Die Inkonsistenz nach der Nachricht von Abschnitt 4.Absturz beim Löschen einer Zeile - Inkonsistenz im Abschnitt wird nicht aktualisiert

* Assertionsfehler in - [UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit_Sim/UIKit-1262.60. 3/UITableView.m: 920 2010-11-22 19: 56: 44.789 bCab [23049: 207] * Beenden der App aufgrund der nicht abgefangenen Ausnahme 'NSInternalInconsistencyException', Grund: 'Ungültige Aktualisierung: ungültige Anzahl der Zeilen in Abschnitt 4. Die Anzahl der Zeilen in einem vorhandenen Abschnitt nach der Aktualisierung (1) muss gleich der Anzahl der Zeilen in diesem Abschnitt vor der Aktualisierung sein (0), plus oder minus der Anzahl der Zeilen eingefügt oder gelöscht von diesem Abschnitt (0 eingefügt) , 0 gestrichen). "

In Datenquelle, I Abschnitt 4 in Abhängigkeit von der Anzahl der Zeilen in Abschnitt 3 aktualisieren Wenn eine Zeile aus dem Abschnitt 3 gelöscht wird, die Anzahl der Zeilen in Abschnitt geht 4 von 0 auf 1. Dies scheint das Problem zu verursachen . Gibt es keine Möglichkeit, dies zu vermeiden?

Alle Zeiger würden sehr geschätzt werden. Danke.

UPDATE:

numberOfSectionsInTableView - (NSInteger) numberOfSectionsInTableView: (UITableView *) tableview { return 6;
}

numberOfRowsInSection

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
bCabAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 

    if (section == 0) {  // First name, last name 
     return 2; 
    } 
    else if (section == 1) { // Password 
     return 2; 
    } 
    else if (section == 2) { // Mobile, DOB , Gender 
     return 3; 
    } 
    else if (section == 3) { // credit cards 
     return [creditCards count]; 
    } 
    else if (section == 4) { // Add credit card 
     if ([creditCards count] >= 3) { 
      return 0; 
     } 
     else { 
      return 1; 
     } 
    } 
    else if (section == 5) { 
     return 0; 
    } 

    return 0; 

}

commitEditingStyle

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (editingStyle == UITableViewCellEditingStyleDelete) { 
     if (indexPath.section == 3) { 
     // Delete the row from the data source 
     NSLog(@"%d %d", indexPath.section, indexPath.row); 
     [creditCards removeObjectAtIndex:indexPath.row]; 

     // Delete from backend 

     [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:YES]; 

     //[tableView reloadData]; 
     } 
    } 
    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 
    } 

}

Ich habe es mit und ohne [tableView reloadData] mit denselben Ergebnissen versucht.

Vielen Dank für Ihre Hilfe!

+0

Können Sie nach Ihren numberOfSectionsInTableView und Tableview: numberOfRowsInSection Methoden plz? – MathieuF

+0

Können Sie Code zum Entfernen von Zeilen posten? –

Antwort

3

In Datenquelle, I Abschnitt 4 in Abhängigkeit von der Anzahl der Zeilen in Abschnitt 3 aktualisieren, wenn eine Zeile aus Abschnitt 3, die Anzahl der Zeilen im Abschnitt gelöscht wird 4 geht von 0 bis 1. Dies scheint zu verursachen das Problem. Gibt es keine Möglichkeit zu vermeiden, dies?

Wenn deleteRowsAtIndexPaths:withAnimation mit Ihnen, dass die Datenquelle nur die Zeilen mit den angegebenen Indexpfade entfernt werden haben, sind garantiert. In Ihrem Fall fügen Sie auch eine Zeile in die Tabelle ein, was bedeutet, dass der Status der Datenquelle nicht das ist, was die Tabellenansicht erwartet.

Wenn eine Zeile in Abschnitt 3 zu löschen, die in Abschnitt beinhaltet auch 4 Einfügen einer Zeile Sie so etwas wie tun muss:

[self.tableView beginUpdates]; 
[self.tableView [NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
[self.tableView insertRowsAtIndexPath:[NSArray arrayWithObject:indexPathForInsertedRow] withRowAnimation:UITableViewRowAnimationFade]; 
[self.tableView endUpdates]; 
+0

Das hat perfekt funktioniert! Danke vielmals.. – Prasanna

0

Wie fügen Sie die neue Zeile in Abschnitt 4 hinzu, wenn eine Zeile in Abschnitt 3 gelöscht wird?
Es ist keine gute Lösung, aber Sie können versuchen, eine reloadData zu machen, wenn die Zeile gelöscht wird.

+0

Maximale Anzahl von Kreditkarten im System ist 3. Wenn es 3 ist, brauche ich nicht die Kreditkarte hinzufügen. Sonst habe ich es. Ich habe ReloadData versucht, und es hat keine Wirkung. Danke für Ihre Antwort. – Prasanna

1

Bevor Sie die Zelle löschen, entfernen Sie das entsprechende Objekt in creditCards?

+0

Ja, ich entferne es aus dem entsprechenden Array. Ich habe die Frage mit dem commitEditingStyle-Code aktualisiert. – Prasanna

+0

Versuchen Sie, Daten erneut zu laden, bevor Sie die Zeile löschen? – MathieuF

+0

Es stürzt erneut ab, aber mit einer etwas anderen Nachricht - Beenden App aufgrund der nicht abgefangenen Ausnahme 'NSInternalInconsistencyException', Grund: 'Ungültige Aktualisierung: ungültige Anzahl der Zeilen in Abschnitt 3. Die Anzahl der Zeilen in einem vorhandenen Abschnitt nach dem Update (3) muss gleich der Anzahl der Zeilen in diesem Abschnitt vor der Aktualisierung sein (3), plus oder minus der Anzahl der Zeilen, die in diesem Abschnitt eingefügt oder gelöscht wurden (0 eingefügt, 1 gelöscht). " – Prasanna

Verwandte Themen