无法接收来自第二个视图控制器的回叫

我有两个视图控制器。 我试图将数据传递给以前的视图控制器

我在我的第二个视图控制器CEPeoplePickerNavigationController下面的代码

 @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 

当用户点击完成button时,下面的代码将被执行

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

在我的第一个视图控制器中,我在头文件中有以下接口,并且我在我的第一个视图控制器中实现了先前的视图控制器方法,其中必须接收数据

 @interface CallViewViewController : UIViewController<CEPeoplePickerNavigationControllerDelegate> @end 

当我从第一个视图控制器移动到第二个视图控制器时,使用下面的代码。

 CEPeoplePickerNavigationController *nextVc = [[CEPeoplePickerNavigationController alloc] init]; nextVc.peoplePickerDelegate = self; [self presentViewController:nextVc animated:YES completion:nil]; 

但是,当用户从第二个视图控制器单击完成button,我没有收到我的第一个视图控制器的任何callback。 为什么这样?

我已经实现了如下界面,

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

更新:

以下代码作品

 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]; 

你的代码似乎是绝对正确的,但要解决所有的可能性。 你可以检查你做的button动作是否有一个检查,以确定在该类中委托方法是否可用?

 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"); }