2010-06-28 12 views
12

Quindi sto aggiornando una vista tabella inserendo/eliminando/ricaricando le righe secondo necessità, ma, dato che non sono sicuro al 100% che il tableview si aggiorni sempre correttamente, c'è un modo per fallire in sicurezza da una serie errata di aggiornamenti ?UITableView: ripristino da NSInternalInconsistencyException dopo errori di aggiornamento?

In questo momento, ho questo:

// 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; 
     } 
    } 

Tuttavia, una volta colpisce tale eccezione, reloadData sembra non funzionare. C'è un altro modo per ripristinare sostanzialmente UITableView in uno stato operativo?

risposta

3

Più idealmente si dovrebbe fare il backing della tabella con un array che è garantito per fare ciò che la tabella si aspetta che faccia. UIKit si aspetta che le eccezioni siano fatali (questo vale per la filosofia Apple secondo cui le eccezioni indicano errori del programmatore.)

+2

Sì, sarebbe estremamente ideale. Non intendo sembrare sgarbato, ma idealmente tutto andrebbe bene e niente andrebbe storto. Sfortunatamente, ciò accade raramente. E nel codice di produzione, preferirei che fallisse in sicurezza invece di bloccare l'app sul volto dell'utente. –

+3

@David bene, se sei assolutamente pronto per il recupero. Prenderò l'eccezione, quindi ricreare la vista tabella. Sappi che questo quasi certamente colmerà un po 'di memoria e potrebbe lasciare altre cose in stati indesiderati. – cobbal

Problemi correlati