У меня есть UITableView с разделами, из которых я пытаюсь удалить строки. При переключении на AFMotion из BubbleWrap я начал получать несколько неизменных ошибок массива. Обычно они фиксируются путем добавления mutableCopy на объект, который я изменяю, прежде чем нажимать его контроллер вида. Однако для таблицы с разделами я прохожу мимо замороженной/неизменяемой ошибки массива, но получаю NSInternalInconsistencyException: Invalid update: invalid number of rows in section 0
. Я видел другие вопросы по этим вопросам и попытался добавить beginUpdates
, endUpdates
и т. Д., Но он все равно не сработает.NSInternalInconsistencyException: Неверное обновление в таблицеView с разделами
Мой объект данных является хэш, который выглядит следующим образом:
{
"Items" => ["one", "two", "three"],
"More" => ["four", "five", "six"]
}
я прохожу, что данные на новый контроллер, когда я представляю его:
def tap_items(sender)
controller = ItemsController.alloc.initWithNibName(nil, bundle:nil)
controller.data = @data[:items].mutableCopy
self.presentViewController(
UINavigationController.alloc.initWithRootViewController(controller),
animated:true,
completion: lambda {}
)
end
Тогда в ItemsController
мой стол настроенное для удаления строк следующего содержания:
def tableView(tableView, commitEditingStyle:editingStyle, forRowAtIndexPath:indexPath)
if editingStyle == UITableViewCellEditingStyleDelete
rows_for_section(indexPath.section).delete_at indexPath.row
tableView.deleteRowsAtIndexPaths([indexPath],
withRowAnimation:UITableViewRowAnimationFade)
end
end
Но это порождает внутреннюю несогласованность e xception ошибки. Я также пробовал data[sections[indexPath.section]].delete_at indexPath.row
вместо rows_for_section(indexPath.section).delete_at indexPath.row
. Но это ничего не меняет.
Обновление: Вот код для моего Tableview
def viewDidLoad
super
@table = UITableView.alloc.initWithFrame(self.view.bounds)
@table.autoresizingMask = UIViewAutoresizingFlexibleHeight
self.view.addSubview(@table)
@table.dataSource = self
@table.delegate = self
end
def sections
data.keys.sort
end
def rows_for_section(section_index)
data[self.sections[section_index]].mutableCopy
end
def row_for_index_path(index_path)
rows_for_section(index_path.section)[index_path.row]
end
def tableView(tableView, titleForHeaderInSection:section)
sections[section]
end
def numberOfSectionsInTableView(tableView)
self.sections.count
end
def tableView(tableView, numberOfRowsInSection: section)
rows_for_section(section).count
end
Я не эксперт по Ruby, поэтому я точно не знаю, как это ведет себя ... но разве вы не удаляете из изменяемой копии своих данных (как возвращено row_for_section), а не редактируете сами исходные данные? Вы упомянули, что вы пытались изменить каждый из них по отдельности, но попытались удалить запись из данных BOTH и rows_for_section? – James
У меня есть, но там я получаю 'не могу изменить замороженный/неизменный массив' – tvalent2