2010-06-28 5 views
12

Итак, я обновляю табличное представление, вставляя/удаляя/перезагружая строки по мере необходимости, но, поскольку я не уверен на 100%, что tableview всегда будет правильно обновляться, есть ли способ безопасно сбой от плохой партии обновлений ?UITableView: Восстановление из NSInternalInconsistencyException после неудачных обновлений?

Прямо сейчас, у меня есть это:

// 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 в рабочее состояние?

ответ

3

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

+2

Да, это было бы идеально. Я не собираюсь звучать, как снег, но в идеале все будет хорошо, и ничто не пойдет не так. К сожалению, это редко случается. И в производственном коде, я бы предпочел, чтобы он не удался безопасно, вместо того, чтобы свернуть приложение на лице пользователя. –

+3

@ Давид хорошо, если вы абсолютно настроены на восстановление. Я поймаю исключение, а затем воссоздаю представление таблицы. Знайте, что это почти наверняка утешит некоторую память и может оставить другие вещи в нежелательных состояниях. – cobbal

Смежные вопросы