La Vue De La Table De Rechargement Sections Se Bloque

J'ai une vue de table avec 4 sections et 1-2 vue de la table de cellules par section. La première cellule a un uiswitch comme un accessoire de vue et contrôles le thème de couleur de l'application, de la commutation entre le mode jour et le mode nuit. Une fois que le commutateur est frappé d'une fonction est appelée, en changeant les couleurs de la barre de navigation et la couleur d'arrière-plan. Dans cette fonction, j'ai aussi mis la ligne

[self.tableview reloadData];

pour mettre à jour la table elle-même avec les nouvelles couleurs. Il fonctionne très bien mais ya pas d'animation, j'ai donc utilisé ce lieu

[self.tableView reloadSections:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 3)] withRowAnimation:UITableViewRowAnimationFade];

Lorsque cette ligne est utilisé le commutateur est coincé et l'application se fige. Il ne plante pas, c'est à dire il n'y a pas de crash, il vient de se fige et le uiswitch s'arrête milieu de l'animation.

J'ai remarqué que je peux recharger les sections qui n'ont pas de cellules qui contiennent accessoire de vues, et il fonctionne parfaitement avec l'animation de fondu. I. e. cela fonctionne

[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:2] withRowAnimation:UITableViewRowAnimationFade];

Parce que la troisième section n'a pas de cellules avec l'accessoire points de vue. Mais tout article qui a une cellule qui contient un accessoire de vue (c'est à dire les sections 0 et 2) si j'ai essayer et de le recharger l'appli se fige.

Des idées pourquoi ce qui se passe? Ci-dessous mon 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;
}
S'il vous plaît ajouter de Crash dans votre question.
C'est vraiment bizarre, il n'y a pas de crash, l'application se bloque, il ne plante pas. Le commutateur est coincé dans le milieu et l'application cesse de répondre. Pas de crash
toutes les suggestions?
Vous pouvez gérer des Objets de la Cellule de la Table. Et d'Éviter trop de calculs en CellForRawAtIndexPath: la Méthode. De le garder aussi simple que vous le pouvez.

OriginalL'auteur jcooper_82 | 2014-11-05