2011-08-05 4 views
0

프로토콜 및 위임을 설정하려고합니다.iPhone setDelegate에 이전에 할당 된 객체

이전에 할당 된 개체에 대리자를 설정하고 싶습니다.

할당하고있는 객체는 프로토콜에 위임해야합니다. 어떻게 된거 야?

Heres my code. 객체가 스택으로 푸시 될 때

//SendSMS.h

@protocol ModalViewDelegate 

- (void)didReceiveMessage:(NSString *)message; 

@end 

@interface SendSMS : UIViewController <UITextViewDelegate, UITextFieldDelegate> { 


    MessageOptions *messageOptions; 
    LoginPage *loginPage; 
    IBOutlet UITextField *phonenumber; 
    IBOutlet UITextView *smsBody; 
    IBOutlet UIScrollView *scrollview; 

} 

-(IBAction)LoadMessageOptions; 

@end 

문제이다. 그것의 대의원은 자기 자신의 것이 아닙니다. 그러나 그것의 앞에 목적의 그것.

아이디어가 있으십니까?

업데이트!

좋아요. 내 대리자를 [self.navigationController.viewControllers objectAtIndex:0] 인 rootviewcontroller로 설정할 수있었습니다. 하지만 프로토콜에서 프로토콜이 발견되지 않는다는 3 가지 경고가 있습니다. 그들은 누구인가 ....하지만 그것은 실행과 작품을 컴파일합니다.

+0

사용자가 만든 클래스에서 대리인을 프로토콜을 구현하는 개체로 할당 할 수 있습니다. http://www.iprav.in/?p=57 –

+0

을 확인하십시오.하지만 위임자를 자기에게 설정합니다. 3 개의보기가 있고보기 3이보기 1에 데이터를 전달하기 때문에 자체에 위임 할 수 없습니다. 건너 뛸 수 있다면 자체를 두 번 통과하는 것이 무의미 할 것입니다. 메서드가 스택에서 설정됩니다. – MrPink

+0

view1 또는 해당 컨트롤러에 대한 참조가있는 경우 view3을 만들 때 해당 참조에 대리자를 할당하십시오. –

답변

2

인스턴스가 대리인을 스스로 설정하지 못하도록합니다. 대표자들과 함께하는 전체 아이디어는 위임자가 누구인지 알 필요가 없다는 것입니다. 내가 여러분의 건축을 이해함에 따라 그것은 3 단계로 깊습니다.

  1. View1은 루트 컨트롤러입니다.
  2. View2 몇 가지 일을 한 다음 생성하고 푸시합니다.
  3. View3 누구에게나 결과를 보내려고합니다.

가능한 해결책은 두 가지입니다.

해결 방법 1 - 대표

  1. 보자 View3 대리자 프로토콜 View3Delegate을 선언합니다.
  2. View1View3Delegate에 따르게하십시오.
  3. View1이 생성되어 푸시하는 경우 View2도 유지하려면 self을 전달하십시오. View2 생성하고 View3
  4. View3 그것이 결과입니다 보내려고 3 단계에서 전달 된 대리자를 설정 밀어하면
  5. 는 대리자를 호출하고 행복합니다.

해결 방법 2 - 알림

이전 솔루션 View2 필요 그냥 View1View3 작업을하기 위해 물건을 처리하기 위해 추가 단계가 있기 때문에 이것은 아마도 귀하의 경우 더 우아한 솔루션입니다 , 그것의 진짜 책임과 관련이 없습니다.

  1. 이라는 알림을 신고하십시오. View3을 신고하십시오.
  2. View1View3ResponseNotification이라는 알림을 보냅니다.
  3. View1은 걱정없이 View2을 생성하고 푸시합니다.
  4. View2은 걱정없이 View3을 생성하고 푸시합니다.
  5. View3이 결과를 보내려는 경우 View3ResponseNotification 알림을 게시합니다.
+0

나는 진드기를 줄 것이다. 이것은 내가 그것을하는 길을 생각하는 길 이었지만 조금 길었다 고 생각했습니다. 그래서 View 2가 View 3을 밀면 스택의 index : 0에있는 viewcontroller에 setsthelegate를 설정합니다. 그것은 정말 잘 작동합니다. 위의 문제는 간단한 재부팅으로 인해 컴파일러 경고가 중단 된 또 다른 xcode 문제였습니다. – MrPink

관련 문제