2013-03-21 2 views
0

저는 이것이 아주 기본적인 것이라고 생각합니다. 그러나 그것에 대해 아무 것도 찾을 수 없었습니다.델리게이트 설정

저는 viewController 마녀가 여러 개의 폼 시트 viewControllers가있는 navigationController에 대한 모달 세그를 가지고 있습니다. 이 같은

의 ViewController --- (모달 SEGUE)의 ViewController CI에서> C의 ViewController

이렇게, 대리인을 만들었다 --- --->있는 navigationController --->의 ViewController의 B :

@protocol ViewControllerCDelegate <NSObject> 
- (void)myMehtod; 
@end 

@interface ViewControllerC : UIViewController 

@property (nonatomic, assign) id <ViewControllerCDelegate> myDelegate; 

(내가 합성 한 myDelegate)

내가 myDelegate가의 ViewController의 A. 내 질문은, 어디 내가 어떻게해야합니까로 설정하려는

? 내가의 ViewController (A)의 viewDidLoad에이에에 노력했습니다

는 :

ViewControllerC *delegateController = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewControllerC"]; 
delegateController.myDelegate = self; 

하지만 대리자 설정 얻을 나타나지 않습니다. 아이디어?

+1

'delegateController'가 실제로 인스턴스화되고 있습니까? 어딘가에 그 참조를 붙잡고 있니? –

+0

위의 코드 세그먼트에서 참조하는 ViewControllerC의 인스턴스가 실제로 실제로 사용되는 인스턴스입니까? 즉, 다른보기 컨트롤러를 다른 곳에 인스턴스화하지 않는 것입니까? –

+0

ViewControllerA가 제시 될 때가 아니라 ViewControllerC가 제시 될 때 델리게이트를 설정해야합니다. 그리고 myDelegate를 합성 할 필요는 없습니다. – AMayes

답변

0

instantiateViewController를 수행하면 NEW ViewControllerA가 생성됩니다. 기존 ViewControllerA를 원한다면 컨트롤러 체인을 통과시켜야합니다. 문제가되는 경우 앱 위임자에 속성을 저장하여 저장할 수 있습니다. 철학적으로 어떤 사람들은 애플 리케이션 델리게이트를 글로벌 변수 클리어링 하우스로 사용하는 것에 반대 할 수도 있지만 포인터를 4 레벨의 뷰 컨트롤러로 전달하는 것보다 더 깨끗할 수 있습니다. 이 경우 대리자 패턴이 필요합니까? 아마도 NSNotificationCenter가 더 깨끗한 옵션일까요?

+0

의미가 있습니다. 하지만 viewController에 액세스하는 예제를 줄 수 있습니까? – Michael

+0

다른 인스턴스 변수 나 속성처럼 액세스합니다. 당신은 "B"가 진행 중이기 때문에 B에 속성을 생성하여 A에 대한 참조를 보유한 다음 C로 전달할 수 있습니다. 그러면 A에서 B 로의 prepareForSegue에서 그렇게 할 수 있습니다. 그러면 B가 생성 할 때 C, A에 대한 참조를 C에 집어 넣으십시오. B가 실제로 A를 참조 할 필요가 없을 때 일종의 janky입니다. 그래서 다른 디자인이 더 깨끗해질 수 있다고 생각합니다. C에게 A와 통신하기 위해 필요한 것이 무엇인지 알지 못해도 말하기는 어렵습니다. 아마도 A & C 모두 관찰하는 별도의 데이터 모델이 필요할 것입니까? – jsd