【发布时间】:2017-02-11 11:57:21
【问题描述】:
我正在尝试实现委托设计模式。
我有两个视图控制器如下m
- CallViewViewController
- CEPeoplePickerNavigationController
这是我对CallViewViewController的接口定义
@interface CallViewViewController ()<CEPeoplePickerNavigationControllerDelegate>{
}
@property(nonatomic)CustomMessageClass * customMessageClassObject;
@end
在我的实现中,我当然实现了委托方法
-(void)cePeoplePickerNavigationController:(CEPeoplePickerNavigationController *)peoplePicker didFinishPickingPeople:(NSArray *)peopleArg values:(NSDictionary *)valuesArg
{
NSLog(@"can populate the tableview");
}
这是我第二个类的接口定义,
@protocol CEPeoplePickerNavigationControllerDelegate;
@interface CEPeoplePickerNavigationController : UIViewController <UITableViewDelegate,UITableViewDataSource>{
id<CEPeoplePickerNavigationControllerDelegate> peoplePickerDelegate;
ABAddressBookRef addressBook;
}
@property (nonatomic, assign) id<CEPeoplePickerNavigationControllerDelegate> peoplePickerDelegate;
@property (nonatomic, retain) CEPeoplePickerNavigationController *ppnc;
@end
@protocol CEPeoplePickerNavigationControllerDelegate <NSObject>
- (void)cePeoplePickerNavigationController:(CEPeoplePickerNavigationController *)peoplePicker didFinishPickingPeople:(NSArray*)people values:(NSDictionary *)values;
@end
当用户按下提交按钮时,我正在执行以下代码,
if ([self.ppnc.peoplePickerDelegate respondsToSelector:@selector(cePeoplePickerNavigationController:didFinishPickingPeople:values:)])
[self.ppnc.peoplePickerDelegate cePeoplePickerNavigationController:self.ppnc didFinishPickingPeople:sortedPeople values:[NSDictionary dictionaryWithDictionary:self.selectedValues]];
但是数据没有被传回之前的视图控制器。为什么会这样?
更新
我尝试使用以下代码将表单首先移动到第二个视图控制器,
CEPeoplePickerNavigationController *nextVC = [self.storyboard instantiateViewControllerWithIdentifier:@"PeoplePickerNavigationController"];
nextVC.peoplePickerDelegate = self;
[self presentViewController:nextVC animated:YES completion:nil];
但它会引发以下错误,
由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[UINavigationController setPeoplePickerDelegate:]:无法识别的选择器发送到实例 0x101054800”
【问题讨论】:
-
你的第一个视图控制器是否接受委托?
-
no...第一个视图控制器委托没有被调用
-
我正在使用 instantiateViewControllerWithIdentifier
-
我猜@Saheb Roy 给出了完整的解决方案
-
它正在使应用程序崩溃
标签: ios objective-c