App委托:发送到实例的无法识别的选择器

时间:2014-10-19 05:09:56

标签: ios appdelegate

我的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的新手,我不太明白为什么它不允许我通过患者对象。有人可以帮忙吗?

2 个答案:

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