UITableView добавляет / удаляет разделы, не находясь в режиме редактирования?

У меня есть UITableView и в основном я делаю некоторые в настройках приложения, и если UISegmentedControl первого раздела переключается на индекс 1, тогда я хочу отобразить новый раздел, но если индекс 1 был ранее установлен, и пользователь выбирает индекс 0, тогда Мне нужно удалить раздел 2.

Для этого у меня был установлен этот код для UISegmentedControl's valueChanged event

  if (segmentControl.selectedSegmentIndex == 0) { self.settings.useMetric = YES; if ([sections containsObject:FT_AND_IN] && [sections containsObject:FRACTION_PRECISION]) { NSArray *indexSections = [NSArray arrayWithObjects: [NSIndexPath indexPathForRow:0 inSection: [sections indexOfObject:FT_AND_IN]], [NSIndexPath indexPathForRow:0 inSection: [sections indexOfObject:FRACTION_PRECISION]], nil]; [sections removeObject:FT_AND_IN]; [sections removeObject:FRACTION_PRECISION]; [self.tableView deleteRowsAtIndexPaths:indexSections withRowAnimation:UITableViewRowAnimationRight]; } } else { self.settings.useMetric = NO; [sections insertObject:FT_AND_IN atIndex:1]; [sections insertObject:FRACTION_PRECISION atIndex:2]; NSArray *indexSections = [NSArray arrayWithObjects: [NSIndexPath indexPathForRow:0 inSection: [sections indexOfObject:FT_AND_IN]], [NSIndexPath indexPathForRow:0 inSection: [sections indexOfObject:FRACTION_PRECISION]], nil]; [self.tableView insertRowsAtIndexPaths:indexSections withRowAnimation:UITableViewRowAnimationRight]; } 

Где NSMutableArray называемые sections – это список всех разделов. Каждый раздел имеет только одну строку, поэтому не требуется никаких вспомогательных массивов.

Однако при оценке части else я получаю эту ошибку:

 *** Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit_Sim/UIKit-1261.5/UITableView.m:904 *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of sections. The number of sections contained in the table view after the update (6) must be equal to the number of sections contained in the table view before the update (4), plus or minus the number of sections inserted or deleted (0 inserted, 0 deleted).' 

Я проверил, что у него было 4 раздела до else, он правильно добавил эти два раздела в массив sections , я сказал ему правильные indexPaths для добавленных разделов. Почему это не работает?

Я попытался заменить [self.tableView insertRows/deleteRows...] с [self.tableView reloadData]; и тогда он отлично работает, но я хочу оживить добавление / удаление этих разделов.

Обновление. Я попробовал это предложение и добавил работы, но я сбой при удалении

 [self.tableView beginUpdates]; if (segmentControl.selectedSegmentIndex == 0) { self.settings.useMetric = YES; if ([sections containsObject:FT_AND_IN] && [sections containsObject:FRACTION_PRECISION]) { [self.tableView deleteSections:[NSIndexSet indexSetWithIndex: [sections indexOfObject:FT_AND_IN]] withRowAnimation:UITableViewRowAnimationRight]; [self.tableView deleteSections:[NSIndexSet indexSetWithIndex: [sections indexOfObject:FRACTION_PRECISION]] withRowAnimation:UITableViewRowAnimationRight]; } } else { self.settings.useMetric = NO; [sections insertObject:FT_AND_IN atIndex:1]; [sections insertObject:FRACTION_PRECISION atIndex:2]; NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex:1]; NSIndexSet *indexSet2 = [NSIndexSet indexSetWithIndex:2]; [self.tableView insertSections:indexSet withRowAnimation:UITableViewRowAnimationRight]; [self.tableView insertSections:indexSet2 withRowAnimation:UITableViewRowAnimationRight]; } [self.tableView endUpdates]; 

Я получаю эту ошибку.

 *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** - [NSIndexSet initWithIndexesInRange:]: Range {2147483647, 1} exceeds maximum index value of NSNotFound - 1' 

FT_AND_IN и FT_AND_IN только добавляются / удаляются из хранилища данных в этом коде, и они являются объектами const NSString .

One Solution collect form web for “UITableView добавляет / удаляет разделы, не находясь в режиме редактирования?”

Очень трудно прочитать ваш неформатированный код.

Вы хотите посмотреть -[UITableView insertSections:withRowAnimation:] и -[UITableView deleteSections:withRowAnimation] , я думаю.

Пытаться:

 if (segmentControl.selectedSegmentIndex == 0) { self.settings.useMetric = YES; if ([sections containsObject:FT_AND_IN] && [sections containsObject:FRACTION_PRECISION]) { NSMutableIndexSet *indexSections = [NSMutableIndexSet indexSetWithIndex:[sections indexOfObject:FT_AND_IN]]; [indexSections addIndex:[sections indexOfObject:FRACTION_PRECISION]]; [sections removeObject:FT_AND_IN]; [sections removeObject:FRACTION_PRECISION]; [self.tableView deleteSections:indexSections withRowAnimation:UITableViewRowAnimationRight]; } } else { self.settings.useMetric = NO; [sections insertObject:FT_AND_IN atIndex:1]; [sections insertObject:FRACTION_PRECISION atIndex:2]; NSMutableIndexSet *indexSections = [NSMutableIndexSet indexSetWithIndex:[sections indexOfObject:FT_AND_IN]]; [indexSections addIndex:[sections indexOfObject:FRACTION_PRECISION]]; [self.tableView insertSections:indexSections withRowAnimation:UITableViewRowAnimationRight]; } 
  • Как изменить цвет и цвет текста раздела UITableView
  • Настройка layoutMargins UIView не работает
  • Параметры редактирования исчезли при перезагрузке tableview ios 8
  • В методе canEditRowAtIndexPath reloadData UITableView работает неправильно?
  • Существуют ли какие-либо преимущества в использовании UITableViewController над UIViewController, который реализует методы делегирования табличных представлений и источников данных?
  • Как сделать собственный шрифт и цвет в UITableViewRowAction без раскадровки
  • Как изменить высоту загруженной ячейки таблицы?
  • Динамическая высота ячейки таблицы
  • как автоматически растянуть UISegmented Control по горизонтали, чтобы заполнить полный UITableViewCell?
  • В чем разница между deselectRowAtIndexPath и ячейкой setSelected?
  • GroupMe Контакты | Адресная книга
  • Interesting Posts

    Я хотел бы реализовать половину UITableView половину MapView UIView с кнопкой в ​​середине

    Внутренняя ошибка CFNetwork: URLConnectionLoader.cpp: 289

    – : непризнанный селектор, отправленный в экземпляр 0x7490da0 '

    Xcode: EXC_BREAKPOINT (EXC_ARM_BREAKPOINT, subcode = 0xe7ffdefe)

    Использование жестов с помощью SpriteKit для перетаскивания, поворота и масштабирования нескольких спрайтов отдельно в одно и то же время

    Как LogOut от аутентификации iOS ADAL?

    Создание UIViews в фоновом потоке

    Можно ли использовать значение для одного ключа в Info.plist внутри значения другого ключа Info.plist?

    Ошибка приема <unknown>: 0: ошибка: нет такого файла или каталога:

    UINavigationBar, который изменяет прозрачность при прокрутке

    iOS 5.0 AVAudioPlayer Ошибка загрузки аудиоклипа: операция не может быть завершена. (Ошибка OSStatus -50.)

    Как программно изменить клавиатуру в iOS?

    Ручной выбор пользовательского CallOutView swift

    Что происходит, когда мое приложение больше не поддерживает более старую iOS

    Можно ли использовать перетаскивание iOS 11 для переупорядочения нескольких элементов / ячеек за раз в UITableView?

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.