2014-04-28 3 views
1

두 개의 앱에 UITableViewControllers이 있습니다. 첫 번째 테이블보기에서 셀을 클릭하면 서버에서 데이터를 가져온 다음 두 번째 테이블보기로 이동합니다.두 화면 사이에 로딩 스피너 표시 방법

사용자가 클릭하면 서버에서 데이터를로드하고 그 다음에 두 번째 테이블보기를 표시합니다. 그 사이에 데이터가 서버에서로드되기 때문에 두 번째 지연이 있습니다.

사용자가 첫 번째 테이블 컨트롤러에서 셀을 클릭하고 서버에서 데이터를 가져 왔을 때 "로드 중"회 전자가 사라지면 즉시 로딩 스피너를 보여주고 싶습니다.

이 나는 ​​현재하고 있어요 무엇 :

Class FirstController < UITableViewController 
... 
    def tableView(tableView, didSelectRowAtIndexPath:indexPath) 
    initAFNetworkingClient 
    Colors.fetch(AFMotion::Client, self.data[indexPath.row]["id"]) do |data| 
     self.navigationController.pushViewController(SecondController.alloc.initWithData(data, self.data[indexPath.row]), animated:true) 
    end 
    end 
... 
end 
+1

왜 두 번째보기를 표시하지 않고 필요한 데이터를 얻을 때까지 회 전자를 표시합니까? – Wain

+0

나는 그 일을 시도했다. 나는 두 번째 뷰를 바로 보여 주었고 두 번째 뷰의 viewDidLoad 메서드에서 서버로부터 데이터를로드했다. 그러나 서버의 데이터가 비동기 적으로로드되므로 테이블 뷰에 데이터가 바로 필요하기 때문에 오류가 발생합니다. – birdy

+0

그래서 잘못 코딩했거나 테이블에 * 데이터가 있어야만한다면 틀리게 설계되었습니다. 테이블은 데이터가 사용 가능해질 때까지 빈 배열 (행 수 0)을 가져야합니다. – Wain

답변

0
  1. 비동기
  2. 시작은 시작, 반입 스피너 즉시 번 데이터를 가져옵니다. MDProgressHUD은 이에 대한 좋은 라이브러리입니다.
  3. 일단 페치가 완료되면 회 전자를 중지하십시오.

메인 스레드의 UI 변경 사항을 확인하십시오.

 dispatch_async(dispatch_get_main_queue(), ^{ 
      // main thread tasks here 
     } 
관련 문제