Table View Recargar secciones Bloqueos

Tengo una vista de tabla con 4 secciones y 1-2 celdas de vista de tabla por sección. La primera celda tiene un uiswitch como vista de accesorios y controla el tema de color de la aplicación, cambiando entre el modo de día y el modo de noche. Una vez que se pulsa el interruptor se invoca una function, cambiando los colors de la barra de navigation y el color de background. En esa function también puse la línea

[self.tableview reloadData]; 

para actualizar la tabla con los nuevos colors. Funciona bien pero no hay animation, así que utilicé esto

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

Cuando se usa esa línea, el interruptor se atasca y la aplicación se congela. No falla por decir, es decir, no hay logging de lockings, simplemente se congela y el uiswitch detiene la animation media.

Noté que puedo recargar secciones que no tienen celdas que contienen vistas accesorias y que funciona perfectamente con la animation de desvanecimiento. Es decir, esto funciona

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

Porque la tercera sección no tiene celdas con vistas accesorias. Pero cualquier sección que tenga una celda que contenga una vista accesoria (es decir, las secciones 0 y 2) si bash y la vuelvo a cargar, la aplicación se congela.

¿Alguna idea de por qué está sucediendo esto? A continuación se muestra mi 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; } 

Tuve el mismo problema en UITableViewCell comprende UISwitch . [self.tableview reloadData] el problema llamando a [self.tableview reloadData] antes de volver a cargar las secciones:

 NSIndexSet *sections = [[NSIndexSet alloc] initWithIndex:2]; [self.tableView reloadData]; [self.tableView reloadSections:sections withRowAnimation:UITableViewRowAnimationFade]; 

El mismo problema ocurre si llama:

 [self.tableView reloadRowsAtIndexPaths:[self.tableView indexPathsForVisibleRows] withRowAnimation:UITableViewRowAnimationFade] 

sin volver a cargar los datos primero.

no ha agregado un logging de lockings pero estoy adivinando que está recibiendo un error que indica que un número existente de filas en una sección debe ser igual a algún valor antes de una actualización. Si ese es el caso, ¿utilizó [self.tableview beginUpdates] antes de volver a cargar la tabla y [self.tableview endUpdates] después de volver a cargar?