2014-05-16 2 views
0

나는 자동차 응용 프로그램을 작성 중입니다. 다른보기 컨트롤러에 연결된 TabBar가 있습니다 (CarInfoViewController 중 하나임).TabBarController 모범 사례에서 ViewController 받기

나는

CarInfoViewController *myCarInfoController = [self.tabBarController.viewControllers objectAtIndex:2]; 
[myCarInfoController setSearchParam:vin]; 

내가 일을 대 objectAtIndex를 사용하여 TabBar의에서 직접 뷰 컨트롤러를 받고의 차이가 무엇인지 알고 싶다면 다음과 같은 방법을 사용하여 뷰 컨트롤러 중 하나에 데이터를 전달하고있어 다음 :

CarInfoViewController *myCarInfoController = [[CarInfoViewController alloc] init]; 
[myCarInfoController setSearchParam:vin]; 

두 가지 방법이 있습니다. 이런 경우 가장 좋은 방법이 무엇인지 궁금합니다.

+1

모범 사례는 탭 막대 컨트롤러를 실제로 작성한 방법에 따라 다릅니다. 세 가지 방법 (내 대답 참조)은 완벽하게 '합법적'이며 장점과 단점이 각각 있습니다. 각 방법이 올바른 선택 일 수 있습니다. 그리고 거기에서부터 우리는 데이터를 전달하기 위해 개별 View Controller에 액세스하는 모범 사례에 대해 논의 할 수 있습니다. 또한 어떤 상황에서 데이터를 전달해야하는지 설명해야합니다. 똑똑한 방법으로 View Controller를 잡고 그 속성을 설정할 수 있습니다. 하지만 그것은 당신이 속한 구체적인 상황/상황에 달려 있습니다. –

+0

@HermannKlecker 고마워요! 프로그래밍 방식으로 뷰 컨트롤러를 만들고 있는데 어떤 방법을 사용해야할지 확실하지 않았습니다. 그러나 당신의 대답은 나에게 좋은 이해를주었습니다. 고맙습니다. – Kaiusee

+0

좋습니다, 프로그래밍 방식으로 만들 때 참조 (속성 또는 응용 프로그램 대리자 내에서 일반 인스턴스 변수 또는 메서드 내에서 로컬 변수가 메서드에서 사용되는 경우에만)를 보유하는 것이 좋습니다. myCarInfoController는 이미 로컬 변수입니다. 나중에 사용하기 위해 참조를 보관하십시오. 그런 다음 관심있는보기 컨트롤러가 탭 막대 구조 내에서 세 번째보기 컨트롤러라는 것에 의존하지 않습니다. –

답변

3

둘 다 잘 작동하는지 의심 스럽습니다. 물론 뷰 컨트롤러를 프로그래밍 방식으로 만드는 경우가 아니라면 나중에 만든 myCarInfoController 개체를 탭 막대 컨트롤러에 나중에 추가해야합니다.

첫 번째 문장을 사용하면 탭 표시 줄에서 컨트롤러를 받게됩니다. 인터페이스 작성기 또는 스토리 보드 편집기에서 알맞게 만든 컨트롤러 일 수도 있습니다. 이 뷰 컨트롤러 중 탭 번호가 하나 인 것을 알 수 있습니다. 3 (색인 번호 2)

두 번째 문장에 CarInfoViewController의 새로운 인스턴스가 할당되었습니다. 이전에 (IB 등으로) 만들어져 있고 탭 표시 줄 컨트롤러에 세 번째 컨트롤러로 상주 한 것이 있다고 가정하면 서로 관련이없는 동일한 클래스의 두 가지 등급이 있습니다. 어떤 데이터를 myCarInfoController (변형 2)으로 전달하면 탭 막대 컨트롤러에서 사용되는 바로 그 인스턴스에 아무 것도 일어나지 않습니다.

관련 문제