UITableView insertRowsAtIndexPaths-Fehler
-
13-11-2019 - |
Frage
Ich habe fast alle Suchergebnisse durchgesehen, aber mein Fehler verschwindet nicht.Ich habe eine Tabellenansicht mit 2 Abschnitten und jeweils 1 Zeile (aus einem Array) initialisiert.Ich habe eine Schaltfläche für die Abschnittsüberschriftenansicht.Wenn ich auf eine Schaltfläche klicke, möchte ich dem 1. Abschnitt eine Zeile hinzufügen.Hier ist der Code:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 2;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [arr count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = (UITableViewCell*)[self.myTableView dequeueReusableCellWithIdentifier:@"DetailCell"];
cell.textLabel.text=[arr objectAtIndex:indexPath.row];
cell.backgroundColor=[UIColor clearColor];
return cell;
}
-(UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
switch (section) {
case 0:
btnReleases=[UIButton buttonWithType:UIButtonTypeCustom];
[btnReleases setFrame:CGRectMake(10, 0, 30, 39)];
[btnReleases setImage:[UIImage imageNamed:@"buttonr.png"] forState:UIControlStateNormal];
[btnReleases addTarget:self action:@selector(loadReleases) forControlEvents:UIControlEventTouchUpInside];
return btnReleases;
break;
case 1:
btnLinks=[UIButton buttonWithType:UIButtonTypeCustom];
[btnLinks setFrame:CGRectMake(10, 0, 30, 39)];
[btnLinks setImage:[UIImage imageNamed:@"buttonl.png"] forState:UIControlStateNormal];
[btnLinks addTarget:self action:nil forControlEvents:UIControlEventTouchUpInside];
return btnLinks;
break;
default:
break;
}
}
-(void)loadReleases
{
[self.myTableView beginUpdates];
[arr addObject:@"WTF"];
NSArray *insert0 = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]]; NSLog(@"%@",insert0);
[self.myTableView insertRowsAtIndexPaths:insert0 withRowAnimation:UITableViewRowAnimationBottom];
[self.myTableView endUpdates];
}
Hier ist der Fehler:
* Assertionsfehler in -[UITableView _endCellAnimationsWithContext:], / Quellcache/ UIKit_Sim/UIKit-1912.3/ UITableView.modell: 1046
Lösung
Da Sie verwenden [arr count]
als Rückgabewert für tableView:numberOfRowsInSection:
, am Ende des beginUpdates…endUpdates
blockieren Die Tabellenansicht erwartet, dass in jedem Ihrer Tabellenansichtsabschnitte zwei Zeilen vorhanden sind, aber Ihr Aufruf an insertRowsAtIndexPaths:
zeigt nur an, dass sich eine Zeile in Abschnitt 0 befindet.
Sie müssen Ihre reparieren tableView:numberOfRowsInSection:
so geben Sie je nach Abschnitt unterschiedliche Werte zurück:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (section == 0) {
return [arr count];
} else {
return 1;
}
}
Beachten Sie, dass mit Ihrer Tabellenansicht eine Menge fischiges Zeug los ist:sie haben zwei Abschnitte, aber Sie zeigen in jedem Abschnitt genau dieselbe Zeile 0 an.Und das Einfügeverhalten in Ihren Abschnitten ist ziemlich wackelig:sie beginnen mit der Anzeige nur einer Zeile, die dem Fall 0 in Ihrem entspricht switch
, dann geben Sie an, dass Sie eine Zeile in Zeile 0 einfügen, wonach Sie die Zeile case 0 in Zeile 0 und die Zeile Case 1 in Zeile 1 anzeigen.Sie sollten also wirklich eine Zeile in Zeile 1 anstelle von Zeile 0 einfügen:
NSArray *insert0 = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:1 inSection:0]];
[self.myTableView insertRowsAtIndexPaths:insert0 withRowAnimation:UITableViewRowAnimationBottom];
Andere Tipps
Versuchen Sie es mit unter dem Code generasacodicetagpre.