2011-08-05 5 views
0

내 app에서는 tableView에서 하나의 셀을 클릭 할 때 화면을로드해야하는 여러 tableviews를 사용합니다. 나는 새로운있는 tableView 데이터를 준비하는 동안 나는 로딩 화면을 표시 할 수있는 새로운 UIView의 (activityIndicator 및 레이블)을 넣고iphone은 tableview가 갈 준비가 될 때까지 화면을로드합니다.

[[self navigationController] pushViewController:newController animated:YES];

전화를 시도했다. 그러나이 접근법은 실제로 작동하지 않았습니다. 실제로는 새로운 테이블 뷰가 준비 될 때까지로드 스크린이 나타나지 않고 이전 tableview에서 멈추었습니다.

그래서 나는 다른 방법으로, NSOperation/NSOperationQueue와 그 풋 로딩 화면을 시도했다. 그것은 작동하지만로드하는 화면이 조금 늦게 나타납니다 (새로운 tableView의 작업 중간에 표시).

사용자가 셀을 클릭 한 직후에 로딩 화면을 보여주고 싶습니다. 어떻게이 문제를 해결할 수 있습니까?

+0

로드해야하는 테이블 뷰와 동일한 스레드에 있기 때문에 로딩 화면 코드가 표시되지 않습니다. 기본적으로 제거되기 전에 사용자가 볼 수 있습니다. –

답변

3

데이터로드 코드가 백그라운드 스레드에 배치되어 시작되었다고 제안합니다. 그런 다음 "로드 중 ..."보기 또는 다른 것을 올려 놓으십시오. 이렇게하면 디스플레이가 반응합니다. 데이터로드가 완료되면 데이터가 준비되었음을 주 스레드에 알리고 주 스레드는 "로드 중 ..."디스플레이를 제거 할 수 있습니다.

즉, 데이터로드와 같은 장기간 실행 작업이 필요할 때 스레드를 사용하여 읽습니다.

2

대신 사용 NSOperation[NSThread detachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget withObject:(id)anArgument]. tableView 프로세스 코드를 별도의 메서드에 넣고 detachNewThreadSelector:@selecot(yourMethodName)에 호출합니다. 이 스레드를 만들기 전에 활동 컨트롤러의 애니메이션을 시작하고 스레드가 완료되면 중지하십시오. NSThreading에 대한 완전한 참고 자료는 여기에서 찾을 수 있습니다 ->http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSThread_Class/Reference/Reference.html. 희망이 도움이됩니다.

해피 코딩!

관련 문제