Ich habe eine App mit einer Tabellenansicht, die Abschnitte erweitert/reduziert. Beachten Sie dabei das Beispiel in Apples Table View Animations & Gestures sample app. Ich stoße auf Probleme, wenn ein Element zu einem geschlossenen Abschnitt hinzugefügt wird: Danach wird der Abschnitt nicht mehr geöffnet, und ich bekomme eine Ausnahme, wenn ich versuche, es zu öffnen und dann zu schließen.Zeilen, die nicht in UITable eingefügt werden
Ich habe dies zu einem seltsamen Verhalten in der Öffnungs-/Schließ Methoden verfolgt:
-(void)sectionHeaderView:(SectionHeaderView*)sectionHeaderView sectionOpened:(NSInteger)section {
if (![[sectionHeaderArray objectAtIndex:section] isOpen]) {
[[sectionHeaderArray objectAtIndex:section] setIsOpen:YES];
NSLog(@"self.tableView: %@", self.tableView);
id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];
NSInteger countOfRowsToInsert = [sectionInfo numberOfObjects];
NSMutableArray *indexPathsToInsert = [[NSMutableArray alloc] init];
for (NSInteger i = 0; i < countOfRowsToInsert; i++) {
[indexPathsToInsert addObject:[NSIndexPath indexPathForRow:i inSection:section]];
}
// Apply the updates.
[self.tableView beginUpdates];
NSLog(@"Count of rows to insert: %d", [indexPathsToInsert count]);
NSLog(@"Rows before insert: %d", [self.tableView numberOfRowsInSection:section]);
[self.tableView insertRowsAtIndexPaths:indexPathsToInsert withRowAnimation:UITableViewRowAnimationTop];
NSLog(@"Rows after insert: %d", [self.tableView numberOfRowsInSection:section]);
[self.tableView endUpdates];
}
}
-(void)sectionHeaderView:(SectionHeaderView*)sectionHeaderView sectionClosed:(NSInteger)section {
if ([[sectionHeaderArray objectAtIndex:section] isOpen]) {
[[sectionHeaderArray objectAtIndex:section] setIsOpen:NO];
NSInteger countOfRowsToDelete = [self.tableView numberOfRowsInSection:section];
if (countOfRowsToDelete > 0) {
NSMutableArray *indexPathsToDelete = [[NSMutableArray alloc] init];
for (NSInteger i = 0; i < countOfRowsToDelete; i++) {
[indexPathsToDelete addObject:[NSIndexPath indexPathForRow:i inSection:section]];
}
[self.tableView beginUpdates];
NSLog(@"Count of rows to delete: %d", [indexPathsToDelete count]);
NSLog(@"Rows before delete: %d", [self.tableView numberOfRowsInSection:section]);
[self.tableView deleteRowsAtIndexPaths:indexPathsToDelete withRowAnimation:UITableViewRowAnimationTop];
NSLog(@"Rows after delete: %d", [self.tableView numberOfRowsInSection:section]);
}
[self.tableView endUpdates];
}
}
die Log-Meldungen zeigen, dass auf offenes (Einfügungen),> 0 Zeilen eingefügt werden, und doch ist die Zeilenanzahl für diesen Abschnitt bleibt 0:
2012-03-31 13:36:17.454 QuickList7[5523:fb03] Count of rows to insert: 3
2012-03-31 13:36:17.454 QuickList7[5523:fb03] Rows before insert: 0
2012-03-31 13:36:17.454 QuickList7[5523:fb03] Rows after insert: 0
Dies stellt einen inkonsistenten Zustand zwischen dem Tisch und der Datenquelle, und dann, wenn ich versuche zu „Zusammenbruch“ den Abschnitt, erhalte ich die folgende Ausnahme:
Wie kann ich 3 Zeilen einfügen und trotzdem mit 0 Zeilen enden?
Danke,
Sasha
Das ist ein kniffliger! Ich hatte das gleiche Problem und es dauerte Stunden, bis ich herausfand, dass es etwas damit zu tun hatte, dass die Abschnitte nicht erweitert wurden. –