UINavigationController не работает (pushViewController игнорирует представление) - PullRequest
0 голосов
/ 13 июня 2011

Есть много вопросов относительно UINavigationController. Я изменяю свой код в соответствии с примерами Apple, но метод pushViewController не работает:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

[window addSubview:navController.view];

[window makeKeyAndVisible];

LoginController *login = (LoginController*)[self.navController.viewControllers objectAtIndex:0];

if([login already_validated] == TRUE) {
    self.timeline = [[TimelineViewController alloc] initWithNibName:@"Timeline" bundle:[NSBundle mainBundle]];

    [navController pushViewController:timeline animated:YES];

    [self.timeline release];
}

return YES;     

представление загружается корректно в строке:

self.timeline = [[TimelineViewController alloc] initWithNibName:@"Timeline" bundle:[NSBundle mainBundle]];

... но

[navController pushViewController:timeline animated:YES];

не представляет вид. Я проверил и navController не является нулевым.

Есть идеи?

Best!

Лукас.


ИСПРАВЛЕНО !!

Проблема заключается в MainWindow.xib.

НЕ устанавливайте rootViewController в классе окна!

Если вы установите атрибут в файле XIB, это представление будет поверх всего остального.

Ответы [ 2 ]

0 голосов
/ 13 июня 2011

Попробуйте это ..

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    


[window addSubview:navController.view];


[window makeKeyAndVisible];


LoginController *login = (LoginController*)[navController.viewControllers objectAtIndex:0];//here remove self


if([login already_validated] == TRUE) {

    self.timeline = [[TimelineViewController alloc] initWithNibName:@"Timeline" bundle:nil];//remove the nsbundle mainbundle


    [navController pushViewController:self.timeline animated:YES];//here u have to use with self.timeline

    [self.timeline release];

}

return YES;  
0 голосов
/ 13 июня 2011

Вы никогда не должны отправлять release в собственность напрямую! Управление памятью осуществляется с помощью метода установки!

вместо:

[self.someProperty release];

запись:

self.someProperty = nil;

Обычно вы делаете это методом dealloc.

В вашем случае просто удалите строку [self.timeline release]; или не используйте свойство вообще.

EDIT

добавить авто-релиз:

self.timeline = [[[TimelineViewController alloc] initWithNibName:@"Timeline" bundle:[NSBundle mainBundle]] autorelease];
...