Таблица View Обновить разделы Сбои

У меня есть табличное представление с 4 разделами и 1-2 ячейками табличного представления на раздел. Первая ячейка имеет Uiswitch как вспомогательный вид и управляет цветовой темой приложения, переключаясь между дневным и ночным режимами. После нажатия переключателя вызывается функция, меняющая цвета панели навигации и цвета фона. В этой функции я также поставил строку

[self.tableview reloadData];

обновить саму таблицу новыми цветами. Он работает нормально, но нет анимации, поэтому я использовал это вместо

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

Когда эта линия используется, переключатель застревает, и приложение зависает. Он не падает, скажем так, то есть нет журнала аварий, он просто зависает и Uiswitch останавливает середину анимации.

Я заметил, что могу перезагрузить разделы, в которых нет ячеек, содержащих дополнительные представления, и это прекрасно работает с анимацией затухания. То есть это работает

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

Потому что третий раздел не имеет никаких ячеек с дополнительными видами. Но любой раздел, имеющий ячейку с дополнительным представлением (т. Е. Разделы 0 и 2), если я попытаюсь перезагрузить его, приложение зависает.

Есть идеи, почему это происходит? Ниже мой 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;
}

Ответы на вопрос(2)

Ваш ответ на вопрос