내 앱에는 일련의보기를 밀고 팝하는 탐색 컨트롤러가 있습니다. tableViews 중 하나는 URL에서 .xml 파일을로드하며 4-5 초가 소요됩니다. 내비게이션 막대에서 뒤로 버튼을 클릭하면 표의 내용로드가 완료된 후에 만 응답합니다. 앱이 내비게이션 막대의 제스처에 계속 응답하도록 비동기 적으로 콘텐츠를로드하는 쉬운 방법이 있습니까? p.s. 나는 이것을 인터넷에서 검색하고 사람들은 멀티 스레딩에 대해 이야기하고있다. 나는 쓰레드에 대해 많이 알지 못하므로 좀 더 구체적으로 설명하십시오.iphone dev - 테이블 내용을 비동기 적으로로드 중
답변
원격 데이터를 비동기 적으로 다시로드해야합니다. Here NSURLRequest를 사용하여 대리인 객체를 사용하여 데이터를로드하는 방법에 대한 추가 정보를 찾을 수 있습니다. 이 경우 파일이 완전히로드되거나 시간 초과/오류가 발생할 때까지 응용 프로그램이 멈추지 않습니다.
- (void)connectionDidFinishLoading: (NSURLConnection*)connection
아마도 멀티 스레드 솔루션을 구현해야 할 것입니다. 다중 스레드 응용 프로그램의 주제는 거대한이며 이에 대한 자세한 대답은 책이 될 것이며 그 중 어떤 것도 다른 곳에서도 더 잘 설명 될 것입니다.
기본 사항에는 XML 파일을 가져 와서 정보가있을 때 주 스레드로 다시보고하는 하나 이상의 "작업자"스레드가 포함됩니다. OS가 개발자를 위해이 작업을 훨씬 쉽게 해주는 많은 스레딩 프리미티브를 제공하기 때문에 iPhone/iPad 용으로 이것을 구현하는 것이 너무 어렵지 않아야합니다.
당신은 구현해야합니다 NSURLConnection
봐야한다. 스트림 파서를 사용하면 신속하고 비동기 적으로 업데이트하고 앱의 메모리 프로필을 낮게 유지하는 데 유용합니다.
핵심 데이터 저장소에 XML 데이터를 넣고 테이블보기를 NSFetchedResultsController
및 해당 대리자 메서드에 연결하면 매우 적은 코드로 테이블을 지속적으로 업데이트 할 수 있습니다. 핵심 데이터 및 가져온 결과 컨트롤러는이 답변 범위를 훨씬 뛰어 넘지 만 이러한 주제에 대한 자세한 정보는 Stack Overflow 및 Google에서 검색 할 수 있습니다.
간단하게 배열하려면 데이터를 NSMutableArray
에 넣고 배열 상태가 변경되면 테이블 뷰 또는 특정 섹션과 행을 다시로드하면되지만 테이블 뷰 업데이트는 직접 관리해야합니다.
데이터 모델을 넘어서서보기를 처리하면 복잡해질 수 있습니다. 뒤로 버튼을 클릭하면 뷰 컨트롤러가 해제되고 연결된 모든 속성이 해제되므로보기 컨트롤러에서 XML의 구문 분석을 취소하는 것을주의 깊게 관리하고, 데이터 모델에 할당 된 메모리를 관리해야합니다. 뷰 컨트롤러. 그렇지 않으면보기 컨트롤러가 완전히 해제 된 후에 릴리스 된 객체에 대한 메모리 누수 또는 예외가 발생합니다.
너 자신을 더 편하게하려면 NSOperation
, NSOperationQueue
및 KVO를 읽고 싶습니다. 그러면보기 컨트롤러가 작동하기 전에 작업 상태를 추적하고 정리하는 데 도움이됩니다. NSOperation
클래스를 사용하면 백그라운드에서 작업을 쉽게 실행할 수 있습니다. 스레딩과 잠금을 수행하는 다른 수동 방법이 있지만, 그들은 거의 쾌적하고 깨끗하지는 않습니다. NSOperation
.
읽기 Apple's NSOperation
documentation은 읽기 작업을 수행하는 데 도움이 될뿐만 아니라 작은 테스트 응용 프로그램을 사용하여 응용 프로그램을 다음 단계로 복잡하게 만드는 다양한 프레임 워크 및 클래스에 익숙해집니다.
애플의 XMLPerformance 샘플 응용 프로그램 (스트림을 통해) libxml2
SAX 파서를 통해 XML을 구문 분석하는 방법을 설명하기 위해 특별히 기록됩니다
Apple의 LazyTableImages 예제 코드를 살펴보십시오. 이것은 스레드를 사용하여 정확히 수행합니다. this SO question에 대한 응답도보십시오.
이 다른 SO answer provides code은 remoteImage 클래스 용으로 사용되었으므로 잘 작동합니다.
- 1. flex 구성 요소를 비동기 적으로로드 할 수 있습니까?
- 2. 마크 업을 비동기 적으로로드 (페이지로드가 끝난 후 일부 div로드)
- 3. Android dev 시간 대 iPhone dev 시간
- 4. iPhone dev - 수동으로보기 회전
- 5. iPhone dev-viewDidUnload subviews
- 6. iPhone Dev - @synthesize 키워드?
- 7. iPhone dev 시작하기
- 8. 가입 iPhone dev
- 9. 명시 적으로로드 순서를 설정합니다.
- 10. iPhone Dev - Project.pbxproj의 중요도는 어느 정도입니까?
- 11. /dev/hpib에 대한 내용을 파이프 아웃
- 12. iPhone - 비동기 작업을 수행하기 위해 2 코드 줄을 기다리는 중
- 13. iPhone dev - didReceiveMemoryWarning 또는 매번
- 14. iPhone Dev on Mac Mini
- 15. iPhone dev - NSInternalInconsistencyException 도움이 필요하십니까?
- 16. iPhone dev : 리소스 폴더에서 파일로드
- 17. iPhone Dev : UITableCell을 스 와이프
- 18. iphone dev : 인라인 asm 문제
- 19. iPhone dev 멀티 스레드, NSAutoreleasePool
- 20. iPhone Dev : 플래시 애니메이션 재생
- 21. iPhone dev - AudioQueue 백그라운드로 녹음하기
- 22. 스트리밍하는 방법 UIImageView (iphone dev.)?
- 23. iPhone Dev - Drawing 응용 프로그램
- 24. iPhone Dev 인증서로 Xcode 3.2를 연결해야합니까?
- 25. iphone 비동기 NSURLConnection 취소
- 26. iPhone SDK - 비동기 동작?
- 27. iPhone JSON 비동기 코딩
- 28. iPhone 용 비동기 이미지로드
- 29. iPhone Dev : 트위터 iPhone 클라이언트에서 더 많은 데이터 기능을 얻으시겠습니까?
- 30. iphone dev : 동적으로 크기를 조정하십시오. UITableView
thx! 나는 지금 당신이 제공 한 코드를 사용하여 작동한다고 생각한다. – Brian