我的app委托方法中有一些代码可以将对象发送到视图控制器。出于某种原因,虽然它引发了错误:"无法识别的选择器被发送到实例"
视图控制器中的我有以下变量集:
@property (nonatomic, strong) Patient* patient;
我的app委托中的代码如下所示:
UISplitViewController* splitViewController = (UISplitViewController*)self.window.rootViewController;
UINavigationController* patientNavController = [splitViewController.viewControllers objectAtIndex:0];
PatientMasterTableViewController* patientMasterTableViewController = (PatientMasterTableViewController*)[patientNavController topViewController];
PatientDetailViewController* patientDetailViewController = [splitViewController.viewControllers objectAtIndex:0];
Patient* firstPatient = [[patientMasterTableViewController patientArray] objectAtIndex:0];
[patientDetailViewController setPatient:firstPatient];// this line throwing the error
我是iOS的新手,我不太明白为什么它不允许我通过患者对象。有人可以帮忙吗?
答案 0 :(得分:1)
这行代码:
PatientDetailViewController* patientDetailViewController = [splitViewController.viewControllers objectAtIndex:0];
无法保证返回PatientDetailViewController
。它可以返回任何类的对象,而不是检查返回的对象类。
您的应用正在崩溃,因为它返回的UINavgationController
对象没有setPatient
方法。
至于它为什么要返回错误类的对象,这取决于你创建的视图控制器。
答案 1 :(得分:0)
您的代码中存在错误 - 请看这两行:
UINavigationController * patientNavController = [splitViewController.viewControllers objectAtIndex:0];
PatientDetailViewController * patientDetailViewController = [splitViewController.viewControllers objectAtIndex:0];
数组splitViewController.viewControllers只包含一个!纵向模式中的元素和横向模式中的两个元素。 DetailsViewController总是在这个数组中,但是master没有:在纵向模式下,数组只包含详细视图ctrl,在横向上数组是@ [master,details]
所以如果你想总是得到DetailViewController使用这个代码
[[splitViewController viewControllers] lastObject];