2010-06-28 2 views
12

그래서 필요에 따라 행을 삽입/삭제/다시로드하여 tableview를 업데이트하지만, 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은 예외가 치명적일 것으로 예상합니다 (예외는 프로그래머 오류를 나타냅니다.)

+2

예, 매우 이상적입니다. 나는 잠잠하게 들리는 것을 의미하지는 않지만, 이상적으로 모든 것이 잘 될 것이고 아무것도 잘못 될 것이 없다는 것이 이상적입니다. 불행히도, 거의 발생하지 않습니다. 프로덕션 코드에서는 사용자의 얼굴에 앱이 손상되는 대신 안전하게 실패합니다. –

+3

@ David 당신이 절대적으로 회복을 원한다면. 예외를 잡은 다음 테이블 뷰를 다시 작성합니다. 이것이 거의 확실하게 메모리를 누설하고 다른 것들을 바람직하지 않은 상태로 남겨 둘 수 있음을 알아라. – cobbal

관련 문제