Мне кажется из полученного сообщения об ошибке, что вы используете UINavigationController
в вашем контроллере вкладок; в этом случае вы не можете напрямую отправить ему сообщение getData
; Вы должны сначала выяснить, какой контроллер представления под UINavigationController
должен получить это сообщение. (Это на самом деле не относится к панели вкладок selectedIndex
)
Я не знаю, как организован ваш UINavigationController, но вы могли бы сделать:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
if (tabBarController.selectedIndex == 3) {
//-- option 1: getData goes to the first view controller in the UINavigationController:
[[(SomeViewController*)[(UINavigationController*)viewController topViewController] getData];
//-- option 2: getData goes to the last view controller in the UINavigationController (the visible one):
[[(SomeViewController*)[(UINavigationController*)viewController visibleViewController] getData];
}
}
Если вы дадите более подробную информацию об организации вашего UINavigationController
, я могу помочь в определении правильного варианта.
Во всяком случае, как вы можете видеть из приведений, есть что-то, что не вполне соответствует вашему дизайну. Я настоятельно рекомендую использовать уведомление для этого. Т.е. ваш SomeViewController
регистрируется для уведомления данного типа:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(someSelector:)
name:ShouldGetDataNotification
object:nil];
и контроллер панели вкладок отправляет уведомление вашему контроллеру на реакцию:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
if (tabBarController.selectedIndex == 3) {
[[NSNotificationCenter defaultCenter] postNotificationName:ShouldGetDataNotification object:nil];
}
....
}
Посмотрите на этот пост .