SubView не загружался при первом запуске моего приложения

Я новичок в разработке iPhone. Я попытался создать простое приложение с окном и навигационным контроллером в качестве подпредставления этого окна. Проблема в следующем: при запуске приложения не загружался подвид. У меня просто винда с черным экраном. Чтобы загрузить контроллер представления, я должен выйти из приложения и запустить его во второй раз, после чего у меня появляется дополнительное представление с контроллером навигации. Я добавил кнопку прямо в окно, чтобы убедиться, что черный экран не проблема, но я видел кнопку при запуске.

Это код, который у меня есть в моем AppDelegate:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]autorelease];
    [self.window addSubview:_navigationController.view]; 
    [self.window makeKeyAndVisible];    
    return YES;
}

У вас есть решение этой проблемы?

Спасибо.


person Aladdin Gallas    schedule 03.12.2011    source источник


Ответы (1)


Вам нужно убедиться, что у вас настроена иерархия представлений. RootViewController окна будет UINavigationController. UINavigationController управляет иерархией viewController'ов, поэтому при его создании необходимо назначить rootViewController. Часто это подкласс UITableView.

Поскольку вы выделяете/инициируете окно, я предполагаю, что у вас нет XIB/NIB с UINavigationController и связанным rootViewController, таким как UITableViewController. Кроме того, вместо того, чтобы добавлять представление вашего навигационного контроллера, вам нужно назначить rootViewController окну. Начиная с iOS4 это предпочтительный способ ведения дел. См. также здесь. Попробуйте этот код:

YourViewController *yourViewController = /* code for alloc/initing your viewController */
_navigationController=[[UINavigationController alloc] initWithRootViewController:yourViewController ]
self.window.rootViewController=_navigationController; /* instead of using [self.window addSubview: _navigationController.view] */
[self.window makeKeyAndVisible];

Если вы используете XIB/NIB, вам нужно убедиться, что _navigationController подключен к файлу XIB и имеет подкласс viewController, подключенный как rootViewController.

Удачи

person timthetoolman    schedule 03.12.2011
comment
Спасибо. Но это все та же проблема. - person Aladdin Gallas; 04.12.2011
comment
Вы создали экземпляр UINavigationController? - person timthetoolman; 04.12.2011
comment
Где ? И как мне это сделать? Спасибо. - person Aladdin Gallas; 05.12.2011
comment
Что ж, в вашем текущем коде вы назначаете представление _navigationController в качестве подпредставления окна. Где вы создаете экземпляр _navigationController. Поскольку вы выделяете/инициируете окно, кажется, что вы не используете NIB/XIB, поэтому может случиться так, что ваш _navigationController равен нулю. Если вы не используете XIB/NIB, вам необходимо выделить/инициализировать UINavigationController. - person timthetoolman; 05.12.2011