Когда я звоню:
self.viewController = [[DidItViewController alloc] initWithNibName:@"DidItViewController" bundle:nil];
и затем я проверяю self.viewController.navController право после того, как эта строка выполняется в отладчике, я нахожу, что это пусто (0x0).
На DidItViewController мне определили мой navController как:
IBOutlet NavigationController *navController;
и в моем файле пера мне связали NavigationController с этим navController свойством на Владельце Файла (DidItViewController).
Почему мой navController не становится созданным? Какие-либо идеи? Я думаю, что могу пропускать что-то о пути initWithNibName работы..
Спасибо.
Для загрузки всех компонентов xib может потребоваться некоторое время. Только после viewDidLoad вы можете быть уверены, что navController инициализирован
Не следует определять свойство «navController»; все UIViewController имеют уже автоматически определенные свойства "navigationController" и "navigationItem". Они будут указывать на контроллер навигации и элемент навигации соответственно, при условии, что представление находится в стеке контроллера навигации.
Однако, как было сказано ранее, нельзя полагаться на свойство «navigationController», пока функция «viewDidLoad» не будет был вызван. Вы должны переопределить свой метод viewDidLoad в DidItViewController, чтобы делать любые манипуляции, которые вы собираетесь делать с контроллером навигации.
EDIT:
См .: UINavigationController * UIViewController :: navigationController ()
См .: UINavigationItem * UIViewController :: navigationItem ()
Или вместо этого можно использовать [NSBundle loadNibNamed:owner:options:]
. Этот метод обеспечивает подключение всех розеток. (чего нет в [UIViewController initWithNibName: bundle:]
)
В данном случае, Владелец файла в NIB является внешним экземпляром класса PhotoShow.
// This works completely. All outlets works.
PhotoShow* obj = [[PhotoShow alloc] init];
[[NSBundle mainBundle] loadNibNamed:@"PhotoShow" owner:obj options:nil];
// Outlets are always available at this moment.
// This works. but does not connects outlets correctly sometimes.
PhooShow* obj = [[PhotoShow alloc] initWithNibName:@"PhotoShow" bundle:[NSBundle mainBundle]];
// Outlets may not available at this moment.
Этот метод можно использовать для загрузки пользовательских интерфейсов и сделать объекты доступными для своего кода. В процессе загрузки данный метод деархивирует каждый объект, инициализирует его, устанавливает его свойства в их сконфигурированные значения, и восстанавливает любые связи с другими объектами. (Для установления связей с выходом, данный метод использует метод setValue:forKey:, что может привести к автоматическому сохранению объекта в выходе). Подробную информацию о процессе загрузки пера см. в Руководстве по программированию ресурсов.