2017-02-13 15 views
0

2つのビューコントローラがあります。イムは、私は私の第2のビューコントローラCEPeoplePickerNavigationController2番目のビューコントローラからコールバックを受信できません

@class CEPeoplePickerNavigationController; 
@protocol CEPeoplePickerNavigationControllerDelegate <NSObject> 
- (void)previousViewController:(CEPeoplePickerNavigationController *)controller itemToSend:(NSString *)item; 
@end 


@interface CEPeoplePickerNavigationController : UIViewController <UITableViewDelegate,UITableViewDataSource>{ 
} 
@property (nonatomic, retain) id < CEPeoplePickerNavigationControllerDelegate> peoplePickerDelegate; 
@end 

ユーザーが実行ボタンをクリックで次のコードは、次のコードをexectiedされている

以前のViewControllerにデータを渡すためにしようと

- (void)doneAction:(id)sender 
{ 
    [self.peoplePickerDelegate previousViewController:self itemToSend:@"From Previous VC"]; 
    [self dismissViewControllerAnimated:YES completion:nil]; 
} 

私の最初のビューコントローラーでは、ヘッダーファイルに次のインターフェイスがあり、データを受け取る必要がある最初のビューコントローラーでpreviousViewControllerメソッドを実装しました。

@interface CallViewViewController : UIViewController<CEPeoplePickerNavigationControllerDelegate> 
@end 

最初のビューコントローラから2番目のビューコントローラに移動すると、次のコードを使用します。

CEPeoplePickerNavigationController *nextVc = [[CEPeoplePickerNavigationController alloc] init]; 
    nextVc.peoplePickerDelegate = self; 

    [self presentViewController:nextVc animated:YES completion:nil]; 

しかし、ユーザーが2番目のビューコントローラーから完了ボタンをクリックしたとき、私の最初のビューコントローラーでコールバックは受信されません。なぜそうなのか?私は、次のようなインタフェースを実装している

- (void)previousViewController:(CEPeoplePickerNavigationController *)controller itemToSend:(NSString *)item 
{ 
    NSLog(@"from CEPeoplePickerNavigationController %@",item); 
} 

UPDATE:コードに続いて

if ([[CallViewViewController new] respondsToSelector:@selector(previousViewController:item:)]) { 
    [self.viewCrtrlDelegate previousViewController:self item:@"Here I am"]; 
    [self dismissViewControllerAnimated:YES completion:nil]; 
} 
else{ 
    NSLog(@"Your delegate was properly set"); 
} 

に動作します。しかし、私は道に従うことによって、それをしようとした場合、それが動作しません

if ([[self.viewCrtrlDelegate respondsToSelector:@selector(previousViewController:item:)]) { 
    [self.viewCrtrlDelegate previousViewController:self item:@"Here I am"]; 
    [self dismissViewControllerAnimated:YES completion:nil]; 
} 
else{ 
    NSLog(@"Your delegate was properly set"); 
} 

これは、ビューコントローラをインスタンス化する方法です。

CEPeoplePickerNavigationController *nextVc = [[CEPeoplePickerNavigationController alloc] init]; 

    nextVc.viewCrtrlDelegate = self; 
    [self presentViewController:nextVc animated:YES completion:nil]; 
+0

このメソッドを実行するかどうかを指定します。 –

+0

完了ボタンのボタンアクションを表示します。 –

+0

私は最初のビューコントローラで 'CEPeoplePickerNavigationControllerDelegate'を実装しましたが、 –

答えて

2

あなたのコードは間違いなく正しいと思われますが、すべての可能性を回避してください。 完了ボタンアクションが、そのクラスでデリゲートメソッドが使用可能かどうかを確認するチェックがあるかどうか確認できますか?

if ([self.viewCrtrlDelegate respondsToSelector:@selector(previousViewController:item:)]) { 
    [self.viewCrtrlDelegate previousViewController:self item:@"Here I am"]; 
    [self dismissViewControllerAnimated:YES completion:nil]; 
} 
else{ 
    NSLog(@"Your delegate was properly set"); 
} 
+0

elseループが実行されています –

+0

これは、デリゲートが正しく設定されていないことを意味します。デリゲートメソッドの実装をファーストクラスで提供しているかどうかを確認してください。 –

+0

私は提供しています。私が気づいた問題を更新します –

関連する問題