2014-10-19 2 views
0

У меня есть код в методе делегата моего приложения, который должен отправить объект в контроллер вида. По некоторым причинам, хотя он бросает ошибку: «непризнанные селектор посланный к экземпляру»Делегат приложения: непризнанный селектор отправлен в экземпляр

в контроллере представления У меня есть следующий набор переменных:

@property (nonatomic, strong) Patient* patient; 

код в моем приложении делегата выглядит следующим образом:

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

Вы установили свойство в файл заголовка? – gabbler

+0

Добавьте сведения об исключении, которое вы получаете - оно сообщит вам, что такое селектор и какой тип объекта вы пытались отправить. Это позволит вам решить, где вы поступили не так – Paulw11

+0

Сведения об исключении: UINavigationController setPatient:]: непризнанный селектор, отправленный экземпляру 0x8fa1380 2014-10-19 15: 58: 08.136 ORA [946: 60b] * ** Завершение приложения из-за неотображенного исключения «NSInvalidArgumentException», причина: '- [UINavigationController setPatient:]: нераспознанный селектор, отправленный экземпляру 0x8fa1380' – user2787386

ответ

1

Эта строка кода:

PatientDetailViewController* patientDetailViewController = [splitViewController.viewControllers objectAtIndex:0]; 

Не гарантированно вернуть PatientDetailViewController. Он может возвращать объект любого класса, и вы не проверяете, какой класс объекта возвращается.

Ваше приложение терпит крах, потому что оно возвращает объект UINavgationController, который не имеет метода setPatient.

Что касается того, почему он возвращает объект неправильного класса, это будет зависеть от того, какие создаваемые контроллеры представлений.

0

У вас есть ошибка в вашем коде - смотреть на это две строки:

UINavigationController * patientNavController = [splitViewController.viewControllers objectAtIndex: 0];

PatientDetailViewController * patientDetailViewController = [splitViewController.viewControllers objectAtIndex: 0];

массив splitViewController.viewControllers содержит только ОДИН! элемент в портретном режиме и два элемента в ландшафтном режиме. DetailsViewController всегда находится в этом массиве, но мастер не делает: в массиве портретного режима содержит только вид детали Ctrl и в альбомном массиве @ [мастер, деталь]

, так что если вы хотите всегда получать DetailViewController использовать этот код

[[splitViewController viewControllers] lastObject];

Смежные вопросы