2013-09-02 2 views
1

문제 :jQuery과 데이터 소스/재 장전 경쟁 조건

나는 즉시이 NSNotification를 수신 할 때 컨트롤러에 의해 다시로드되는 UITableView 있습니다. cellForRowAtIndexPathdatasource으로 사용하는 데이터 구조는 테이블이 새로 고침되는 동안 변경 될 수 있습니다.

배경 :

응용 프로그램의 데이터 모델은 NSNotification을 변경할 때마다

트리거됩니다 내가 UITableViewdatasource을 처리 UITableViewController는 " refreshReload"방법을 실행하도록 통보됩니다. " refreshReload"메서드는 모델에서 새 데이터를 검색 한 다음 [tableView reloadData]을 묻습니다. 모델이 변경되고 컨트롤러가 알림을 받고 뷰가 업데이트되는 클래스 MVC 패턴입니다. 신속하게 데이터를 변경하는 빠른 알림이있는 경우 앱이 다운됩니다. 테이블에 cellForRowAtIndexPath이 호출되는 동안 데이터가 포함 된 데이터 구조가 실행 중에 변경됩니다.

이 문제를 방지하기 위해 따라야 할 좋은 패턴은 무엇입니까? 먼저 테이블을 다시로드하지 말고 먼저 정지를 수행 한 다음 datasource을 변경 하시겠습니까?

답변

1

질문을 올바르게 이해하면 전역 플래그를 사용하여 데이터 변경 내용을 잠글 수 있습니다.

singleton 패턴을 사용하여 플래그 값을 유지하십시오. 깃발이 잠겨 있는지 확인하십시오. 플래그가 잠겨 있으면 데이터 변경 방법을 호출하거나 사용하지 마십시오. UITableView 업데이트 할 때 업데이트가 완료 될 때까지 플래그를 잠급니다.

+0

이것은 정확히 내가 한 일입니다. 업데이트가 진행 중이면 tableview는 다시로드를 요청하지 않고 알림이 돌아올 때까지 기다립니다. – bendigi

0

데이터가 매우 자주 변경되는 경우, 즉 테이블이 업데이트되고 테이블에서 다른 다시로드 호출이 발생하는 경우 충돌이 발생합니다.

앱에서 충돌을 해결하려면 : 당신이 할 수있는

우선 그 재 장전 테이블의 많은 자주 호출을 피할 수 있습니다. 알림을 받도록 설정 한 알림 관찰자 메서드에서 플래그를 유지하면,이 플래그는 사용자가이 tableview 화면에 와서 지금 1 분마다 메서드를 호출하는 타이머를 만들 때 다시로드해야한다는 것을 알려줍니다. 이 메소드에서 플래그가 YES인지 확인한 다음 테이블을 다시로드하고 플래그 값을 NO로 변경하면 수행 할 작업이 없습니다.

문제가 확실히 해결되기를 바랍니다.