Swift, agregar una matriz de class a una variable no actualiza el contenido de matriz en la class original

Soy nuevo en IOS, así que perdóname por mis errores de encoding. Me enfrento a un problema en el que tengo un controller TableView con dos secciones. La primera sección tiene un button, onclick, agrega datos a una matriz y elimina su propia fila en la primera sección (hice esto porque hay filas extra no relacionadas en la primera sección). El número de filas en la segunda sección se basa en array.count.

Mi problema es que probé la actualización inicial / final, y todavía no funciona. Cada vez que ejecuto el código a continuación y ejecuto la function startNewDay (cuando se hace clic en el button), se produce este error:

'bash insert la fila 0 en la sección 1, pero solo hay 0 filas en la sección 1 después de la actualización'

Esto no tiene ningún sentido, ya que agregué la matriz antes de insert las nuevas filas. La matriz estaba vacía antes de anexarla. ¿No debería haber el mismo número de filas en la segunda sección como array.count?

Vista de tabla Código de delegado:

override func numberOfSectionsInTableView(tableView: UITableView) -> Int { return 2 } override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { if section == 0 { if dataModel.lists[0].dayHasStarted == false { return 2 } else { return 1 } } else { if itemDoneCount == dataModel.lists[0].item.count && dataModel.lists[0].doneButtonVisible { return dataModel.lists[0].item.count + 1 } else { return dataModel.lists[0].item.count } } } 

Función del button startNewDay cuando se presiona:

 @IBAction func startNewDayDidPress(sender: AnyObject) { dataModel.lists[0].dayHasStarted = true dataModel.lists[0].startDate = NSDate() addItemButton.enabled = !addItemButton.enabled // deleting start new day button let indexPath = NSIndexPath(forRow: 1, inSection: 0) let indexPaths = [indexPath] tableView.beginUpdates() tableView.deleteRowsAtIndexPaths(indexPaths, withRowAnimation: .Fade) tableView.endUpdates() // Inserting new array elements and rows into 2nd section let ritualsArray = dataModel.lists[0].rituals var itemsArray = dataModel.lists[0].item itemsArray.appendContentsOf(ritualsArray) tableView.beginUpdates() var insertRitualsArray = [NSIndexPath]() for item in itemsArray { let itemIndex = itemsArray.indexOf(item) let indexPath = NSIndexPath(forRow: itemIndex!, inSection: 1) insertRitualsArray.append(indexPath) } tableView.insertRowsAtIndexPaths(insertRitualsArray, withRowAnimation: .Top) tableView.endUpdates() } 

Resuelto

El problema de este código no está en absoluto relacionado con el título anterior de este hilo, lo que puede ser engañoso para las personas que tienen el mismo problema que el mío. Por lo tanto, lo voy a cambiar. El título anterior (para los curiosos) fue:

"tableView.begin / end update no actualiza el número de filas en la sección"

Solo para otros que puedan encontrar este problema, el problema no está en el delegado de tableView, ni en la recarga de los datos de la tabla. Para mayor legibilidad, coloqué both dataModel.list [0] .item en itemsArray y dataModel.list [0] .item en ritualsArray. Esto al parecer actualiza los elementosArray cuando se adjunta, pero no el file dataModel.list [0] .item inicial, lo que provocó que la segunda sección de la tablaView no cargue el nuevo número de filas, provocando el error al insert filas en filas no existentes.

Por lo tanto, en lugar de:

  let ritualsArray = dataModel.lists[0].rituals var itemsArray = dataModel.lists[0].item itemsArray.appendContentsOf(ritualsArray) 

esto lo resolvió:

 dataModel.list[0].item += dataModel.list[0].rituals 

Espero que ayude a cualquier principiante como yo que se encuentra con este problema.

Última actualización

Descubrí recientemente que una matriz es de tipo de valor, y no de tipo de reference. Por lo tanto, colocar una matriz en una variable hace una copy de esa matriz en lugar de servir como un marcador de position para la matriz original.

Principiante error opps.

El error que está recibiendo significa que la fuente de datos contiene una cantidad diferente de elementos a la cantidad que habría después de insert o eliminar filas. Esto probablemente significa que los datos no se insertan en su matriz de origen de datos o que los datos no coinciden con los criterios en las sentencias if de su function numberOfRowsInSection. Para solucionar este problema, debe registrar el contenido de la matriz de fuente de datos después de modificarlo para comprobar cuál es su contenido. Si son lo que está esperando (es decir, los datos se han agregado correctamente), entonces el problema está en la forma en que está evaluando su contenido para establecer el número de filas. Si el contenido no es lo que espera, entonces el problema está en la forma en que está insertando los datos en la matriz de fonts de datos.

Tuve un problema similar después de eliminar una fila. Parece que si numberOfRowsInSection no es coherente (igual al último valor -1), aparece este error. Veo que hay una condición en su numberOfRowsInSection, este es quizás el culpable