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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top