UITableView: Восстановление с NSInternalInconsistencyException после плохих обновлений?

Таким образом, я обновляю 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 в рабочее состояние?

13
задан David Liu 28 June 2010 в 22:05
поделиться

1 ответ

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

3
ответ дан 2 December 2019 в 02:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: