2012-10-05 4 views
0

FirstViewController, SecondViewController & ThirdViewController이라는 세 개의보기 컨트롤러를 만들었습니다. FirstViewControllerSecondViewController을 푸시하며, 마찬가지로 SecondViewControllerThirdViewController을 푸시합니다.직접 이동하지 않은 경우 대리자가 호출되지 않음

ThirdViewController은 UITableViewController입니다.

SecondViewControllerThirdViewController에는 사용자 지정 프로토콜이 있습니다. 둘 다 각각 대표자를 사용하여 FirstViewController 값을 전달합니다.

FirstViewController에 값을 성공적으로 전달하는 중 문제가 발생하지만 ThirdViewController은이를 수행 할 수 없습니다.

SecondViewController 직접 FirstViewController에서 안내되고 있기 때문에, 그래서 그것을 통과 할 수 있으며, ThirdViewController가 데이터를 전달할 수있는되지 않도록 FirstViewController 접속되지?

도움을 주시면 감사하겠습니다.

편집 :

FirstViewController 그냥 버튼 액션을 통해 SecondViewController를 푸시합니다.

SecondViewController.h은 다음과 같습니다

@protocol secondViewDelegate <NSObject> 

-(void)didCompleteSending:(NSArray *)array; 

@end 


@interface secondView : UIViewController 
@property (nonatomic,strong) NSArray *footballPlayers; 
@property (assign) id<secondViewDelegate>delegate; 
- (IBAction)btnAction:(id)sender; 
- (IBAction)btnGoToThirdView:(id)sender; 

SecondViewController.m은 다음과 같습니다

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
// Do any additional setup after loading the view from its nib. 

footballPlayers = [[NSArray alloc]initWithObjects:@"Rooney",@"Van Persie",@"Ronaldo",@"Kagawa", nil]; 
} 

- (IBAction)btnAction:(id)sender { 
[delegate didCompleteSending:footballPlayers]; 
} 
- (IBAction)btnGoToThirdView:(id)sender { 
thirdView *objthirdView = [[thirdView alloc]init]; 
objthirdView.delegate=self; 
[self.navigationController pushViewController:objthirdView animated:YES]; 
} 

은 마찬가지로 내가 ThirdViewController에 대한 있습니다.

에서 FirstViewController.h - (무효) didSendDetailsFromThirdView (는 NSString *) 색 { NSLog (색상 "을 선택한 문자열 = @ %이다"@);

-(void)didCompleteSending:(NSArray *)array{ 
    for (NSString *str in array) { 
    NSLog(@"%@",str); 
    } 
} 

-(void)didSendDetailsFromThirdView:(NSString *)colors}

가 호출되지 않습니다 'ThirdViewController'.

당신은 자기로하여 SecondViewController하는 .m에서 ThirdViewController의 대리자를 설정하는

- (IBAction)btnGoToThirdView:(id)sender { 
FirstViewController *objFirstViewController = [FirstViewController alloc]init]; 
thirdView *objthirdView = [[thirdView alloc]init]; 
objthirdView.delegate=objFirstViewController; 
[self.navigationController pushViewController:objthirdView animated:YES]; 
} 
+1

그래서 FirstViewController는 ThirdViewController 및 SecondViewController의 대리자입니까? – Pfitz

+1

코드를 게시 할 수 있습니까? –

+0

예! FirstViewController는 ThirdViewController와 SecondViewController의 대리자입니다. – footyapps27

답변

0

SECOND 편집

objthirdView.delegate=self; 

이는 ThirdViewController의 대리인이 SecondViewController 아닌 것을 의미 FirstViewController. 에 대한 참조를 SecondViewController에 보관하고 이와 같이 위임자로 사용하십시오.

objthirdView.delegate=myFirstViewController; 

당신이 어쩌면 당신은 이미 구현 대리자 메서드를 통해 FirstViewController로 다시 데이터를 전달하기위한 SecondViewController를 오용 할 수있는 FirstViewControllerThirdViewController에서 팝업 할 수없는 가정. 그러나 나는 그것을 추천하지 않는다 - 그것은 좋은 디자인이 아니다.

+0

나는 그것을했고, 지금은 나쁜 접근을 말하는 예외를 던졌습니다! – footyapps27

+0

그것은'secondViewDelegate'가 잘못 배치되었다가 계속해서 잘못된 액세스 예외를 던졌습니다. 모든 아이디어에 대해 어떻게 가야/ – footyapps27

+0

당신은 어떻게 뷰 컨트롤러를 추가합니까? 몇 가지 코드를 게시 할 수 있습니까? – Pfitz

관련 문제