2012-11-30 3 views
0

프로토콜을 사용하여 다른 클래스의 데이터를 가져 오는 데 문제가 있습니다. 데이터를 필요로하는 MVC와 구분하지 않는 클래스에서 대리자를 설정하는 방법을 알 수 없습니다. MVC에서 프로토콜을 만들고 필요한 데이터가 포함 된 임의의 클래스에서 메서드를 구현합니다. 그러나 당신이 segue.destinationViewController를 사용할 때와 같이 위임자 MVC에 대한 참조가 없다면 위임자 MVC로 다시 위임자를 설정하는 방법을 알 수 없습니다."관련없는"클래스의 대리인 설정

+0

이해하기가 약간 어렵습니다. 코드 좀 올리시겠습니까? – emrys57

+0

필자는 이렇게하는 방법을 모르기 때문에 게시 할 코드가 없으므로 더 잘 설명하려고 노력할 것입니다. MVC (MyViewController)보기에 일부 데이터를 넣습니다. 때로는 다른 클래스 (SomeDataClass)에서 추가 데이터가 필요합니다. 나는 MyViewController에서 메소드와 델리게이트로 프로토콜을 생성한다. SomeDataClass에 프로토콜 메소드를 구현합니다. 이제 MyViewController의 대리자를 대리인으로 SomeDataClass를 가리 키도록 설정하려면 어떻게해야합니까? MyViewController에 대한 참조가 없으므로 델리게이트를 참조하도록 설정할 수 없습니다. – Bob

답변

1

MyViewController가 SomeDataClass의 인스턴스를 만들 수 있으면 거기에 대리인을 설정합니다. 컨트롤러간에 연결이 없으면 대신 NSNotification을 사용할 수 있습니다. 이것은 인스턴스를 연결하는 완전히 익명의 방법입니다. 즉, 알림을 보내고 해당 알림을 등록한 모든 클래스가 알림을 수신 할 수 있습니다.

+0

그게 내가 생각하고 있던 해결책이지만 가능한 경우 위임을 사용하여이 작업을 수행하고 싶었습니다. 내가 원하는 걸하지 않은 것처럼 보입니다. – Bob

1

이런 식으로 뭔가?

@implementation MyViewController { 
// keep a pointer to the data supplier class as long as this object exists 
// so that it will continue to exist and send me delegate callbacks 
SomeDataClass *myInstanceOfSomeDataClass; // instance variable to point to my data supplier 
} 

// ... 

- (void)updateMyView { 
    if (myInstanceOfSomeDataClass == NULL) // I haven't created an instance yet 
     myInstanceOfSomeDataClass = [[SomeDataClass alloc] init]; 
    SomeType *results; 
    if (instantResultsAreAvailable) 
     results = [myInstanceOfSomeDataClass getResults]; 
    if (resultsAreOnlyAvailableFromDelegateCallback) 
     myInstanceOfSomeDataClass.delegate = self; 
} 

- (void) delegateCallbackMethod { 
//... 
} 
@end 
+0

두 클래스 사이에 기존 관계가없고 인스턴스를 만들고 싶지 않은 경우 위임을 사용할 방법이 없습니다. – Bob