нажатие nil rootViewController на целевой ‹UINavigationController

Я исследовал это весь день, но ничего не нашел о rootViewController в связи с этим сообщением об ошибке. Я знаю, в чем проблема, но понятия не имею, как ее исправить. Моя проблема в том, что мой window.rootViewController не подключен или показывает null, и я не могу понять, что делать. Я перепробовал все, что мог придумать в коде и в IB, но всякий раз, когда я что-то меняю, случаются плохие вещи. Это сообщение, которое я получаю: «Приложение пыталось отправить контроллер с нулевым представлением на целевой UINavigationController».

Я вижу window.rootViewController из оператора NSLog: «window.rootViewController: (null)»

конечно, все работало отлично до обновления моего Xcode до 4.2 и ios5. :)

Кстати, вид загружается, но я не могу работать ни с одной из кнопок, они вообще не загораются. И моя навигация тоже работает нормально.

вот мой appDelegate

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

[DDLog addLogger:[DDTTYLogger sharedInstance]];
NSLog(@"Viewcontroller : %@", self.viewController);

// Set the view controller as the window's root view controller and display.
//self.window.rootViewController = self.viewController;
//do it this way, previous version not supported in ios5 - may need to check version for compatibility
[self.window addSubview:self.viewController.view];

//set up navigation controller
NSLog(@"window.rootViewController : %@", self.window.rootViewController);
navigationController = [[UINavigationController alloc]
                        initWithRootViewController:self.window.rootViewController];
navigationController.navigationBarHidden = YES;

NSLog(@"navigationController : %@", navigationController);
[window addSubview:navigationController.view];
[window makeKeyAndVisible];

//force this view to be landscape
[application setStatusBarOrientation: UIInterfaceOrientationLandscapeRight animated:NO];
[self.navigationController.view setTransform: CGAffineTransformMakeRotation(M_PI / 2)];
[self.navigationController.view setFrame:CGRectMake(0, 0, 748, 1024)];
[UIView commitAnimations];  


return YES;

}

Спасибо.


person LittlePeculiar    schedule 21.10.2011    source источник


Ответы (1)


Согласно документам:

Обсуждение Контроллер корневого представления обеспечивает представление содержимого окна. Назначение контроллера представления этому свойству (либо программно, либо с помощью Interface Builder) устанавливает представление контроллера представления в качестве представления содержимого окна. Если окно имеет существующую иерархию представлений, старые представления удаляются перед установкой новых.

Дважды проверьте файл пера, чтобы убедиться, что он подключен.

Хотя «Приложение пыталось отправить контроллер с нулевым представлением на целевой UINavigationController» звучит так, как будто вы, возможно, теряете ссылку на VC. Как устанавливается свойство для этого? Он сохраняется?

Вот документы.

http://developer.apple.com/library/ios/documentation/uikit/reference/UIWindow_Class/UIWindowClassReference/UIWindowClassReference.html#//apple_ref/doc/uid/TP40006817-CH3-SW33

person logancautrell    schedule 21.10.2011
comment
Да, это ивар, который сохраняется, а затем высвобождается в Dealloc(). И это связано. - person LittlePeculiar; 22.10.2011