2009-06-23 4 views
0

API 호출을 통해 데이터 배열을 가져 오는 '다운로드'보기 컨트롤러를로드하여 시작하는 앱을 작성 중입니다. 데이터가 반환되면 앱은이보기 컨트롤러의보기를 숨기고 두 개의 탐색 컨트롤러가있는 탭 막대 컨트롤러를로드합니다.iPhone - 인접하지 않은 두 컨트롤러간에 배열 전달

첫 번째 탐색 컨트롤러에 밀어 넣은 첫 번째보기는 테이블보기입니다. 이 테이블 뷰에서 초기 '다운로드'보기 컨트롤러에서 API 호출에서 검색 한 데이터를 표시해야합니다.

누군가 내가 '다운로드'및 테이블보기 컨트롤러 사이에서이 데이터를 전달하는 방법을 설명해 줄 수 있습니까? 그들은 서로에 대해 알지 못한다고 생각합니다.

중요한 것은 탭 표시 줄 컨트롤러를로드하기 전에 데이터를 가져와야하므로 테이블보기 컨트롤러에서 데이터를 가져 오는 것만으로는 불가능하다는 것입니다.

답변

1

데이터가 응용 프로그램에 종속되므로 응용 프로그램 위임자가 포인터를 데이터에 보관하면 두보기는 [[UIApplication sharedApplication] delegate]을 사용하여 데이터에 액세스 할 수 있습니다.

다운로드가 완료되면 데이터가 포함 된 메시지를 응용 프로그램 대리인에게 보낼 수도 있습니다. 뷰 컨트롤러가 숨어있는 대신 뷰 컨트롤러의 뷰가 숨겨져 있다고 말한 이후로 이미 이와 같은 작업을하고 있다고 가정합니다. 어떻게 든 다운로드가 완료되었음을 알아야합니다. 그래서, 다운로드 컨트롤러 :

- (void) downloadFinished { 
    [listener downloadFinished:data]; 
} 

그리고 응용 프로그램 위임 (이전 코드 조각에서 listener)에서 :

- (void) downloadFinished:(NSData *)data { 
    CustomViewController *c = [[[CustomViewController alloc] initWithData:data] autorelease]; 
    [downloadView removeFromSuperview]; 
    [window addSubview:c.view]; 
} 

경우에 대한 데이터를 NIB을로드하고 들고 사용자 정의보기 컨트롤러 거래 테이블에 의한 액세스.

+0

두 번째 옵션을 선호합니다. 일반적으로 Apple은 임의로 응용 프로그램 대리인에 액세스하는 대신 컨트롤러간에 개체를 전달할 것을 권장합니다. – Tim

+0

답장을 보내 주셔서 감사합니다. 나는 당신이 이미 언급 한 두 번째 방법을 꽤 많이하고 있습니다. 그것이 구현 된 방식으로 나의 유일한 싫어하는 것은 데이터가 다운로더 -> 앱 델리게이트 -> 탭 바 컨트롤러 -> 네비게이션 컨트롤러 -> 테이블 뷰 컨트롤러에서 전달되어야한다는 것이다. 하고있어. 감사합니다. 도움에 감사드립니다. – Harry

관련 문제