Der Umgang mit nicht-sichtbaren Zeilen bei Zeile löschen. (UITableViews)

Ich bin der Durchführung einer Löschung von mehreren Zeilen einer Tabelle. In der Tat, bei dieser Gelegenheit alle sichtbaren Zellen sind in der Tat gelöscht.

Dies bewirkt, dass die Zelle unmittelbar unterhalb des sichtbaren Rahmen, um sichtbar zu werden, nachdem die animation, da alle Zellen oben sind nun verschwunden.

Hier ist das Problem, auch diese Zelle ist gelöscht. So bekomme ich die folgende Fehlermeldung, ich gehe davon aus, da der tableview will, dass ich eine Zelle löschen, die nicht auf dem Bildschirm. (aber auf dem Bildschirm während/nach der animation).

2009-06-15 17:44:30.114 HSS[18175:20b] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in section 4.  The number of rows contained in an existing section after the update (0) must be equal to the number of rows contained in that section before the update (1), plus or minus the number of rows inserted or deleted from that section (0 inserted, 0 deleted).'
2009-06-15 17:44:30.117 HSS[18175:20b] Stack: (
    807902715,
    2429263419,
    807986683,
    811271572,
    815059595,
    815007323,
    97367,
    96328,
    96282,
    810768858,
    807687328,
    807683624,
    839142449,
    839142646,
    814752238,
    10968,
    10822
)

Also, was ich tun in dieser situation?

Code, der bewirkt, Ausnahme folgt. Beachten Sie, dass ich tatsächlich erstellt ein neues array namens "filteredTableGroups" in eine andere Methode. Dies ist das aktualisierte Modell. "allTableGroups" ist jede Zelle Controller. Jede Zelle controller enthält ein Wörterbuch verwendet, um füllen Sie die Zellen von Daten. Ich verwende einen Schlüssel, "filteredDataSet", um zu bestimmen, ob die Zelle bleibt in der gefilterten Tabelle. Während der tableview Zelle löschen, ich tausche tableGroups, um auf das aktualisierte Modell. (Ich bin meinen code wie Matt Gallagher und Craig Hockenberry ' s Lösung für die Verwendung von Cell-Controller zur Steuerung der einzelnen Zellen)

- (void)collapseVisableCells{

NSMutableArray *cellsToRemove = [NSMutableArray array];

for(NSArray *sections in self.allTableGroups){

    for(ScheduleCellController *cellController in sections){

        NSString *shouldDisplayString = (NSString*)[[cellController model] objectForKey:@"filteredDataSet"];

        BOOL shouldDisplay = [shouldDisplayString boolValue];

        if(!shouldDisplay){

            UITableViewCell *theCell = [cellController myCell];

            NSIndexPath *cellPath = [self.tableView indexPathForCell:theCell];
            NSLog([cellPath description]);

            if(cellPath!=nil)
                [cellsToRemove addObject:cellPath];


        }
    }

}



[self.tableView beginUpdates];
tableGroups = self.filteredTableGroups;
[self.tableView deleteRowsAtIndexPaths:cellsToRemove withRowAnimation:UITableViewRowAnimationTop];
[self.tableView endUpdates];

}

InformationsquelleAutor Corey Floyd | 2009-06-15
Schreibe einen Kommentar