У меня возникли проблемы с ссылкой на один контроллер вида из другого. Код работает, но я получаю предупреждения, которые заставляют меня думать, что я ошибаюсь. Я пытаюсь перезагрузить данные в tableView
, чья controller
находится в NavigationController
.
Что случилось с сообщением вроде этого:Правильно перемещается иерархия ViewController?
Из AppDelegate:
[self.tabBarController.selectedViewController.topViewController.tableView reloadData];
Хотя это работает, я получаю предупреждение request for member 'topViewController' in something not a structure or union
потому что Xcode не знает, что selectedViewController
возвратит navigationController
. Так что я мог бы сделать следующее:
UINavigationController *myNavigationController = self.tabBarController.selectedViewController;
[myNavigationController.topViewController.tableView reloadData];
Но тогда я получаю это предупреждение: incompatible Objective-C types initializing 'struct UIViewController *', expected 'struct UINavigationController *'
Как далеко я должен пойти с этим? Первая строка работает. Чтобы добраться до «правильного пути», он возьмет 8 строк кода?
Я вижу вашу точку зрения. Событием, инициирующим это действие, является файл, переданный приложению из другого приложения через `application: handleOpenURL`. Если я решаю вызвать метод в моем «tableViewController», чтобы позволить ему обрабатывать это действие (что звучит как хорошая идея). Мне все равно придется ссылаться на `tableViewController` из` AppDelegate` один раз. Я часто сталкиваюсь с этой дилеммой, а не только по этой проблеме. Кажется, я постоянно храню один объект как свойство в другом, до такой степени, что это просто паутина. Вот почему я пытался использовать эту начальную строку кода, чтобы этого избежать. – Andrew 2010-11-27 07:49:36