2014-05-30 5 views
0

나는 탭 막대를 사용하는 응용 프로그램을 작성하고 있습니다.탭 바 사이의 빠른 탐색 사이에 응용 프로그램이 충돌 함

나는 A & B 탭이라고 말합니다.

  • 탭 A를 클릭하면 서버에서 데이터를로드하는 데 시간이 걸립니다.
  • 마찬가지로 탭 B를 클릭하면 시간이 걸립니다.
  • 탭 A를 클릭하고 모든 데이터를로드 할 때까지 기다린 다음 탭 B로 이동하면 정상적으로 작동합니다.
  • A가 서버에서 데이터를로드하는 동안 탭 A를 클릭하고 탭 B로 이동하면 앱이 충돌합니다.

보기에서보기를 언로드하려고했습니다. 그러나 작동하지 않았습니다.

아무도 나에게이 문제를 해결하는 방법을 제안 할 수 있습니까?

+1

참조 용 코드를 게시하십시오. – NANNAV

+0

여러 개의보기가 있으므로 정확한 문제를 게시 할 수 없습니다. 그러나, 나는 웹 서비스에서 데이터를 호출하는 하나의보기가 여전히 다음 탭보기 – Lasang

+0

WS를 비동기 형식으로 호출 할 때 처리 중이므로 문제가 발생하고 있다고 확신합니다. – NANNAV

답변

1

코드를 보지 않고도 대답하기가 어렵습니다. 가능한 많은 원인이있을 수 있습니다. 그러나, 내 첫 번째 추측은 NSURLConnection 완료 핸들러를 메인 큐로 보내고 더 이상 동기화되지 않은 UI를 업데이트하려고하는 것입니다.

즉, 탭 A에서 시작하여 다운로드가 비동기 적으로 시작됩니다. 그런 다음 UI의 탭 B로 전환하여 다른 대기열에서 두 번째 다운로드를 시작합니다. 귀하의 탭 다운로드가 완료되고 완료 핸들러가 메인 대기열로 발송됩니다. 그 완성 처리기에서는 예를 들어 탭 A에 UITableView를 다시로드하는 코드가있을 수 있습니다. 그러나 더 이상 탭 A에 있지 않으므로 해당 뷰 컨트롤러 (및 모든 관련 뷰)는 현재 프로그램의 수명에 없습니다 주기. 무응답 등을 제대로 확인하지 않으면 충돌이 발생할 수 있습니다.

메모리가 부족합니다. 테스트하기 쉽습니다. 앱을 탐색하면서 메모리 사용량을 모니터링하기 만하면됩니다. 메모리 경고에 제대로 응답하지 않으면 앱이 중단 될 수 있습니다. 이것은 아마도 NSURLCache를 사용하고 두 가지 요청을 동시에 다운로드하기 위해 너무 많은 메모리를 커밋하는 경우 가능합니다.

3

각 탭 표시 줄 컨트롤러에 의해로드 된, 나는 self.view = nil 추가; 각보기에 대해 메소드가 사라집니다. 이것은 문제에 의해 해결되었습니다. 이 도움이 될 수 있습니다.