У меня есть приложение с UINavigationController
, которое выдвигает UITabBarController
в поле зрения.У этого UITabBarController
есть четыре вкладки, одна из которых показывает пользовательский UIViewController
, экземпляр EventInformationViewController
.Кнопка в этом пользовательском контроллере представления, в свою очередь, выдвигает другой пользовательский контроллер представления EventRatingAddViewController
в представление.Действие в этом контроллере представления должно вызывать метод в экземпляре EventInformationViewController
.Следующий код вместо этого вызывает сбой приложения:
// get the index of the visible VC on the stack
int myIindex = [self.navigationController.viewControllers indexOfObject:self.navigationController.visibleViewController];
// get a reference to the previous VC
EventInformationViewController *prevVC = (EventInformationViewController *)[self.navigationController.viewControllers objectAtIndex:myIindex - 1];
[prevVC performSelector:@selector(rateCurrentEvent:)];
Я думал, что свойство viewControllers хранит массив всех VC в стеке навигации, поэтому индекс, видимый в данный момент, минус один должен указывать на VC, которыйподтолкнул в настоящее время видимый VC в поле зрения.Скорее, это, кажется, указывает на мой UITabBarController
:
-[UITabBarController rateCurrentEvent:]: unrecognized selector sent to instance
Что случилось с этим и, что более важно, как мне получить указатель на VC, который выдвинул на экран текущий видимый VC?
РЕДАКТИРОВАТЬ: я закончил тем, что создал протокол делегата для EventRatingAddViewController
и назначил EventInformationViewController
в качестве делегата.Это работает хорошо - все же я думаю, что должен быть способ получить доступ к толкающему ВК через стек навигации.