2017-02-13 77 views
0

我有两个视图控制器。我试着将数据传递到上一视图 - 控制无法接收来自第二视图控制器的回调

我已经在我的第二个视图控制器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 

当用户点击完成按钮下面的代码,下面的代码将exectied

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

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

@interface CallViewViewController : UIViewController<CEPeoplePickerNavigationControllerDelegate> 
@end 

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

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

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

但是,当用户从第二视图控制器点击完成按钮,Im不接收在我的第一视图控制器的任何回调。为什么这样?

我已经实现了界面,如下图所示

- (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

我已经附上完成的按钮动作 –

回答

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

其他循环正在执行 –

+0

这意味着您的委托没有正确设置。请检查您是否在第一个类中提供了委托方法的实现。 –

+0

我已提供。我将更新我注意到的问题 –