Подтвердить что ты не робот

UITableView: восстановление из NSInternalInconsistencyException после неудачных обновлений?

Итак, я обновляю табличное представление, вставляя/удаляя/перезагружая строки по мере необходимости, но, поскольку я не уверен на 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, похоже, не работает. Есть ли другой способ в принципе reset UITableView в рабочее состояние?

4b9b3361

Ответ 1

В идеале вы должны поддерживать таблицу с массивом, который гарантированно выполняет то, что ожидает от него таблица. UIKit ожидает, что исключения будут фатальными (это подтверждает философия Apple, что исключения указывают на ошибку программиста.)