Tabellenansicht Neu Laden Abschnitten Stürzt Ab
Ich habe einen table view mit 4 Sektionen und 1-2 Tabellenansicht Zellen pro Sektion. Die erste Zelle hat einen uiswitch als Zubehör Ansicht und steuert das Farb-theme der app, das Umschalten zwischen Tag-Modus und Nacht-Modus. Sobald der Schalter getroffen wird, eine Funktion aufgerufen wird, ändern Sie die Farben der nav-bar und Hintergrundfarbe. In dieser Funktion habe ich auch die Zeile
[self.tableview reloadData];
aktualisieren, die Tabelle selbst mit den neuen Farben. Es funktioniert gut, aber es gibt keine animation, so benutzte ich diese statt
[self.tableView reloadSections:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 3)] withRowAnimation:UITableViewRowAnimationFade];
Wenn die Zeile verwendet wird, der Schalter klemmt und die app friert ein. Es stürzt nicht ab pro sagen, D. H. es ist kein crash-log, ist es nur friert und die uiswitch Stoppt die Mitte der animation.
Bemerkte ich, dass ich die reload-Abschnitte, die keine Zellen enthalten, Zubehör-Ansichten und es funktioniert perfekt mit der fade-animation. I. e. dies funktioniert
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:2] withRowAnimation:UITableViewRowAnimationFade];
Weil der Dritte Abschnitt nicht alle Zellen mit Zubehör-Ansichten. Aber jeder Abschnitt, der eine Zelle, die enthält ein Zubehör-anzeigen (d.h. Abschnitte 0 und 2) wenn ich das versuchen, und laden Sie die app friert ein.
Irgendwelche Ideen, warum dies geschieht? Unten ist mein cellForRowAtIndexPath
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellIdentifier;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIdentifier];
if (indexPath.section == 0) {
cell.textLabel.text = [section0 objectAtIndex:indexPath.row];
cell.accessoryType = UITableViewCellAccessoryNone;
cell.selectionStyle = UITableViewCellSelectionStyleNone;
if (indexPath.row == 0) {
cell.accessoryView = colorSchemeSwitch;
}
else if (indexPath.row == 1) {
cell.accessoryView = autoLockSwitch;
}
}
else if (indexPath.section == 1) {
cell.textLabel.text = [section1 objectAtIndex:indexPath.row];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
else if (indexPath.section == 2) {
cell.textLabel.text = [section2 objectAtIndex:indexPath.row];
cell.accessoryType = UITableViewCellAccessoryNone;
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.detailTextLabel.text = [NSString stringWithFormat:@"%i \t", (int)app.fontSize];
fontSizeSlider.value = app.fontSize;
cell.accessoryView = fontSizeSlider;
}
else if (indexPath.section == 3) {
cell.textLabel.text = [section3 objectAtIndex:indexPath.row];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.detailTextLabel.text = app.color;
}
cell.backgroundColor = app.cellBackgroundColor;
cell.textLabel.textColor = app.textColor;
UIView *backgroundColorView = [[UIView alloc] init];
backgroundColorView.backgroundColor = app.cellSelectedColor;
[cell setSelectedBackgroundView:backgroundColorView];
return cell;
}
- Fügen Sie die Crash-Log-in auf Ihre Frage.
- Es ist wirklich Bizarr, es ist kein crash-log, die app friert ein, es stürzt nicht ab. Der Schalter klemmt in der Mitte und die app reagiert nicht mehr. Kein crash-log
- irgendwelche Vorschläge?
- Verwalten Sie Objekte der Tabellenzelle. Und Vermeiden Sie viel Berechnung in CellForRawAtIndexPath: Methode. Halten, die so einfach, wie Sie können.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte das gleiche Problem in
UITableViewCell
bestehendUISwitch
. Ich löste das problem durch den Aufruf[self.tableview reloadData]
vor dem nachladen der Abschnitte:Das gleiche problem geschieht, wenn Sie anrufen:
ohne Neuladen der Daten.
haben Sie nicht Hinzugefügt, ein crash-log, aber ich vermute Sie bekommen eine Fehlermeldung, dass die Mitgliedstaaten einer vorhandenen Anzahl von Zeilen in einem Abschnitt gleich sein müssen, um etwas Wert, bevor ein update. Wenn das der Fall ist,
Haben Sie
[self.tableview beginUpdates]
vor Neuladen der Tabelle und[self.tableview endUpdates]
nach Neuladen?