iphone navigationController не будет отображаться, если у меня нет доступа к .view - PullRequest
2 голосов
/ 10 января 2010

Когда я создаю iboutlet для моего navigationController и пытаюсь добавить его в текущий просмотр, он ничего не показывает. Это действительно странно, когда я инициализирую свой navigationController в коде, а затем добавляю его в представление, оно отлично работает.

Это даже работает, когда я делаю один в mainWindows.xib и добавляю его в представление в моем методе applicationDidFinishLaunching.

Но как только я пытаюсь загрузить его из другого viewController, он перестает работать, и у меня остается пустой экран.

Так что это работает, когда я добавляю его программно или добавляю в свой mainWindow.xib.

Я часами пытался заставить его работать. Это кажется таким простым, но я не могу заставить его работать в других файлах XIB.

Моя настройка:

#import "RootViewController.h"

RootViewController *rootViewController=[[RootViewController alloc] init];
[window addSubview:rootViewController.navController.view];

Мой RootViewController имеет ibOutlet для контроллера навигации.

У кого-нибудь есть идея? Я совершенно не понимаю, почему эта простая вещь не работает. Чего мне не хватает, это сводит меня с ума.

**** UPDATE **** Приведенный выше код работает, если я изменяю его на: Мне нужно получить доступ к rootViewController.view, иначе не получится, почему?

#import "RootViewController.h"

RootViewController *rootViewController=[[RootViewController alloc] init];
if(rootViewController.view){
NSLog(@"nil"); 
}
[window addSubview:rootViewController.navController.view];

Заранее спасибо!

Ответы [ 3 ]

1 голос
/ 10 января 2010

Это потому, что доступ к view фактически вызывает метод получения, который лениво создает представление контроллера (по запросу). rootController view не существует, пока вы в первый раз не вызовете метод получения view. Обычный способ создать первый вид приложения -

[window addSubview:someController.view]

и он заботится о создании представления.

0 голосов
/ 06 января 2012

У меня похожая проблема на самом деле даже страннее, когда контроллер подключен только в IB, приложение нормально загружается на iPad, но на iPhone у меня пустой экран, и отладчик показывает, что вид контроллера имеет кадр 0, 0, 0, 0 Я исправил это путем сброса выхода rootviewcontroller в коде в ApplicationDidFinishLaunching, но я не понимаю, почему это не работает

0 голосов
/ 10 января 2010

Все время, когда это происходило со мной, всегда была проблема, когда я забывал подключить что-то в Интерфейсном Разработчике. Убедитесь, что ваш контроллер подключен к выходу rootViewController в делегате приложения или где-либо еще. Также убедитесь, что окно подключено.

Если что-то не подключается, то в итоге вы получаете nil в розетке, поэтому self.rootViewController.navController.view в конечном итоге становится [[nil navController] view], который равен nil, и пытается добавить nil как подпредставление считать. Вы также заканчиваете тем, что разговариваете с nil, если window имеет значение nil, но это, вероятно, rootViewController, который не подключен.

...