Таким образом, я обновляю tableview строками вставки/удаления/перезагрузки по мере необходимости, но, поскольку я не на 100% уверен, что tableview будет всегда обновлять правильно, там какой-либо способ перестать работать безопасно от дефектной партии обновлений?
Прямо сейчас у меня есть это:
// Try to animate the updates. If something goes wrong, just reloadData.
@try {
[tableView beginUpdates];
[tableView deleteRowsAtIndexPaths:deleteArray withRowAnimation:UITableViewRowAnimationMiddle];
[tableView reloadRowsAtIndexPaths:reloadArray withRowAnimation:UITableViewRowAnimationNone];
[tableView insertRowsAtIndexPaths:insertArray withRowAnimation:UITableViewRowAnimationMiddle];
[tableView endUpdates];
}
@catch (NSException * e) {
if([[e name] isEqualToString:NSInternalInconsistencyException]){
[tableView reloadData];
NSLog(@"animation failed, just reloading data");
}
else {
@throw e;
}
}
Однако, после того как это поражает то исключение, reloadData, кажется, не работает. Там какой-либо другой путь состоит в том, чтобы в основном сбросить UITableView в рабочее состояние?
В идеале вы должны подкрепить таблицу массивом, который гарантированно будет делать то, что от нее ожидает таблица. UIKit ожидает, что исключения будут фатальными (это соответствует философии Apple, согласно которой исключения указывают на ошибку программиста).