2013-05-08 1 views
1

거대한 XML 파일을 다운로드하고 구문 분석해야합니다. 데이터 다운로드는 다운로드가 완료되면 NSXMLParser를 트리거하는 NSOperation에서 발생합니다.NSOperation 내의 NSXMLParser

이제 사용자가 언제든지 전체 프로세스를 취소 할 수있는 권한을 부여하려는 경우 취소 버튼을 추가하여 다운로드를 중지하고 작업을 취소합니다.

내 문제는 : 내 NSOperation 백그라운드에서 실행되는 경우에도 NSXMLParser 구문 분석을 시작할 때 UI가 완전히 차단됩니다. 그래서 취소 버튼을 만지는 것은 무의미합니다.

어떻게 이런 일이 발생할 수 있습니까? 파서를 (다운로드를 마친 후) NSOperation 내부에서 트리거하고 있기 때문에 구문 분석도 백그라운드에서 수행해야한다고 생각했습니다.

!!! EDIT !!! : 시험을 보았습니다. 파서가 실행되는 스레드를 확인했습니다. 그것은 주요 스레드입니다. 어떻게 될 수 있습니까? NSOperation은 백그라운드 스레드에서 시작됩니다. 파서가 어떻게 메인 스레드에있을 수 있습니까? 어떻게 이것을 피할 수 있습니까?

답변

1

해결되었습니다. 문제는 NSURLConnection이 주 스레드에서 대리자를 호출하여 주 스레드에서 수행되는 모든 다음 메서드 호출을 발생시키는 것입니다.

그래서 메소드를 다시 명시 적으로 백그라운드로 호출해야했습니다.

+0

가능한 한 빨리 그의 대답을 선택하십시오. –

+0

나는 사랑하고 싶지만 2 일을 기다려야합니다.) –