2010-05-18 4 views
0

내 앱에는 일련의보기를 밀고 팝하는 탐색 컨트롤러가 있습니다. tableViews 중 하나는 URL에서 .xml 파일을로드하며 4-5 초가 소요됩니다. 내비게이션 막대에서 뒤로 버튼을 클릭하면 표의 내용로드가 완료된 후에 만 ​​응답합니다. 앱이 내비게이션 막대의 제스처에 계속 응답하도록 비동기 적으로 콘텐츠를로드하는 쉬운 방법이 있습니까? p.s. 나는 이것을 인터넷에서 검색하고 사람들은 멀티 스레딩에 대해 이야기하고있다. 나는 쓰레드에 대해 많이 알지 못하므로 좀 더 구체적으로 설명하십시오.iphone dev - 테이블 내용을 비동기 적으로로드 중

답변

1

원격 데이터를 비동기 적으로 다시로드해야합니다. Here NSURLRequest를 사용하여 대리인 객체를 사용하여 데이터를로드하는 방법에 대한 추가 정보를 찾을 수 있습니다. 이 경우 파일이 완전히로드되거나 시간 초과/오류가 발생할 때까지 응용 프로그램이 멈추지 않습니다.

- (void)connectionDidFinishLoading: (NSURLConnection*)connection 
+0

thx! 나는 지금 당신이 제공 한 코드를 사용하여 작동한다고 생각한다. – Brian

0

아마도 멀티 스레드 솔루션을 구현해야 할 것입니다. 다중 스레드 응용 프로그램의 주제는 거대한이며 이에 대한 자세한 대답은 책이 될 것이며 그 중 어떤 것도 다른 곳에서도 더 잘 설명 될 것입니다.

기본 사항에는 XML 파일을 가져 와서 정보가있을 때 주 스레드로 다시보고하는 하나 이상의 "작업자"스레드가 포함됩니다. OS가 개발자를 위해이 작업을 훨씬 쉽게 해주는 많은 스레딩 프리미티브를 제공하기 때문에 iPhone/iPad 용으로 이것을 구현하는 것이 너무 어렵지 않아야합니다.

0

당신은 구현해야합니다 NSURLConnection

봐야한다. 스트림 파서를 사용하면 신속하고 비동기 적으로 업데이트하고 앱의 메모리 프로필을 낮게 유지하는 데 유용합니다.

핵심 데이터 저장소에 XML 데이터를 넣고 테이블보기를 NSFetchedResultsController 및 해당 대리자 메서드에 연결하면 매우 적은 코드로 테이블을 지속적으로 업데이트 할 수 있습니다. 핵심 데이터 및 가져온 결과 컨트롤러는이 답변 범위를 훨씬 뛰어 넘지 만 이러한 주제에 대한 자세한 정보는 Stack Overflow 및 Google에서 검색 할 수 있습니다.

간단하게 배열하려면 데이터를 NSMutableArray에 넣고 배열 상태가 변경되면 테이블 뷰 또는 특정 섹션과 행을 다시로드하면되지만 테이블 뷰 업데이트는 직접 관리해야합니다.

데이터 모델을 넘어서서보기를 처리하면 복잡해질 수 있습니다. 뒤로 버튼을 클릭하면 뷰 컨트롤러가 해제되고 연결된 모든 속성이 해제되므로보기 컨트롤러에서 XML의 구문 분석을 취소하는 것을주의 깊게 관리하고, 데이터 모델에 할당 된 메모리를 관리해야합니다. 뷰 컨트롤러. 그렇지 않으면보기 컨트롤러가 완전히 해제 된 후에 릴리스 된 객체에 대한 메모리 누수 또는 예외가 발생합니다.

너 자신을 더 편하게하려면 NSOperation, NSOperationQueue 및 KVO를 읽고 싶습니다. 그러면보기 컨트롤러가 작동하기 전에 작업 상태를 추적하고 정리하는 데 도움이됩니다. NSOperation 클래스를 사용하면 백그라운드에서 작업을 쉽게 실행할 수 있습니다. 스레딩과 잠금을 수행하는 다른 수동 방법이 있지만, 그들은 거의 쾌적하고 깨끗하지는 않습니다. NSOperation.

읽기 Apple's NSOperation documentation은 읽기 작업을 수행하는 데 도움이 될뿐만 아니라 작은 테스트 응용 프로그램을 사용하여 응용 프로그램을 다음 단계로 복잡하게 만드는 다양한 프레임 워크 및 클래스에 익숙해집니다.

1

애플의 XMLPerformance 샘플 응용 프로그램 (스트림을 통해) libxml2 SAX 파서를 통해 XML을 구문 분석하는 방법을 설명하기 위해 특별히 기록됩니다

관련 문제