UITableView agregar / eliminar secciones mientras no esté en modo edición?

Tengo una UITableView y, básicamente, estoy haciendo algunos ajustes en la aplicación, y si UISegmentedControl la primera sección cambia al índice 1, entonces quiero mostrar una nueva sección, pero si el índice 1 se estableció previamente y el usuario selecciona el índice 0, entonces Necesito eliminar la sección 2.

Para hacer esto, tenía este código configurado para disparar en el 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]; } 

Donde el NSMutableArray llamado sections es la list de todas las secciones. Cada sección solo tiene 1 fila, por lo que no se necesitan subarreglos.

Sin embargo, al evaluar la otra parte, obtengo este error:

 *** 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).' 

He verificado que tenía 4 secciones anteriores a la otra, agregó correctamente las dos secciones a la matriz de sections , le dije que los índices adecuados se agregaron a las secciones. ¿Por qué no funciona esto?

Intenté replace la línea [self.tableView insertRows/deleteRows...] con [self.tableView reloadData]; y luego funciona bien, pero quiero animar agregar / eliminar esas secciones.

Actualización Probé esta sugerencia y agregué trabajos, pero me estoy poniendo a testing al eliminar

 [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]; 

Me sale este error

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

Los objects FT_AND_IN y FT_AND_IN solo se agregan / quitan del almacén de datos en este código, y son solo const NSString objects.

Es muy difícil leer tu código no formateado allí.

Quiere ver -[UITableView insertSections:withRowAnimation:] y -[UITableView deleteSections:withRowAnimation] , creo.

Tratar:

 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]; }