2013-07-29 3 views
2

iPhone Xcode 스토리 보드 ViewController에서 어떻게 다형성을 구현할 수 있을지 궁금합니다. 내 응용 프로그램에서 두 개의 서로 다른 ViewControllers 공통의 ViewController에 segueing됩니다Storyboard ViewControllers의 다형성

이것은 내 문제입니다.

공통된 ViewController는 서로 다른 원격 API 서버 호출과 CoreData 반입이 수행되는 VC에 따라 다르게 작동합니다 (먼저 모든 사용자를 테이블에 표시하고 다른 사용자는 관리자 목록을 표시합니다. 사용자의 하위 클래스이며 필터링 된 사용자 목록을 제공하는 세 번째 사용자가있을 수 있습니다.

이 공통의 ViewController

내 응용 프로그램에서 매우 중심이며, 다른 많은 ViewControllers에 segues. 따라서 서브 클래 스와 함께 stroyboard에 복사하는 것이 옳지 않은 것처럼 보입니다. 이 목록에 다른 검색을 수행 및 방법의 ViewController 걸쳐 구현의 ViewController 이후에 사용자의 목록은 전달

불행히도 옵션 이하이다.

그것은 서브 클래 싱 및 오리진 SEGUE에 따른 서브 클래스 다형성을 사용하여, 상기 스토리 보드에의 ViewController 할당함으로써 서로 다른 동작을 구현하는 것이 합리적이다.

segueing 때 동적으로 스토리 보드의 ViewController 클래스를 설정하는 방법은 없나요?

+0

난 당신이 다음 해당 통화를 할에서 segueing하고있는 UIViewController를 결정하기 위해 일반적인 뷰 컨트롤러에 속성을 추가 할 이유가 표시되지 않습니다. – limon

+0

@mstfbsnli 귀하의 요지를 참조하십시오,하지만 더 가벼운 클래스와 깨끗한 코드 솔루션을 찾고 있습니다. 다른 VC 메서드에서 if-else if-else 조건을 피하려고합니다. –

답변

2

다른 원격 API 서버 통화 및 CoreData의 페치는 데이터 인터페이스는보기 인터페이스는 다른 점이다 당신이 정말로 여기에 전화하는거야

을 수행한다. 괜찮아. 데이터 가져 오기를 담당하는 별도의 객체를 가져와야합니다. 뷰 컨트롤러를 다형성으로 처리하는 대신 해당 객체를 뷰 컨트롤러로 전달할 수 있습니다. 이것을 전략 패턴이라고하며 코코아에서는 매우 일반적입니다.

위임과 거의 동일하며 여기에서 사용할 수도 있습니다. segue하면 호출 뷰 컨트롤러가받는 뷰 컨트롤러에 대리자를 설정합니다. 그런 다음 위임자는 데이터 객체를 반환하고 다시 수신 뷰 컨트롤러를 다형성에서 해제해야합니다.

+0

이 답변은 훌륭합니다.이 방법을 구현할 것입니다.하지만 같은 의미에서 ViewController 클래스를 동적으로 설정할 방법이 없습니다. 나 맞아? –

+0

확실한 방법이 있습니다. 이런 종류의 문제에 대해서는 좋은 생각이 아닙니다. 런타임에받는 클래스를 다른 클래스로 바꿀 수 있습니다. 그러나 그것은 여기서 끔찍한 생각 일 것입니다. Isa-swizzling은 실수를 범하면 정말 놀라운 버그로 이어질 수 있습니다 (예 : 하위 클래스에 ivar를 추가하는 등 실수 한 번). –

+0

자세한 내용은 http://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/ManagingDataFlowBetweenViewControllers/ManagingDataFlowBetweenViewControllers.html#//apple_ref/doc/uid/TP40007457-CH8-SW4 –