self.navigationController.view - ноль в iOS5, но не в iOS4 - PullRequest
1 голос
/ 08 ноября 2011

У меня странная проблема. Я использую навигационный контроллер и хочу добавить подпредставление (MBProgressHUD) к навигационному контролю. View.

Все отлично под iOS4. Но если я переключаюсь с той же самой частью кода на iOS5, приложение вылетает, потому что navigationController.view теперь равен nil.

Так что в моем коде должно быть что-то, что работает под iOS4, но не под iOS5.

Кто-нибудь догадывается, что я там делаю частично неправильно? Есть ли разница между настройками iOS4 и iOS5?

Я сейчас как-то потерялся, потому что у меня нет общих ошибок, которые я могу найти, но есть более конкретные в контексте iOS5.

Я знаю, что это действительно общее описание, но я думаю, что было бы слишком много, чтобы опубликовать мой полный код здесь.

Так что я действительно ценю каждый намек, потому что совершенно не понимаю, что там не так.

Спасибо

Andreas

Обновление 1:

Я знаю, что проблема возникает из-за tabBarController.

Это следующим образом:

Когда пользователь щелкает строку в UITableView, приложение открывает tabBarController, включающий три представления, каждое из которых состоит из UINavigationController и представления в нем.

Итак, я инициализирую эту конструкцию следующим образом:

    self.tabBarController = [[UITabBarController alloc] init];
    SomeUIViewController* tabOne = [[SomeUIViewController alloc] init];
    tabOne.tableViewContext = self.conferenceContext;

    SomeUIViewController* tabTwo = [[SomeUIViewController alloc] init];
    tabTwo.delegate = tabOne;

    SomeUIViewController* home = [[SomeUIViewController alloc] init];

    [self.tabBarController setViewControllers:[NSArray arrayWithObjects:tabOne, tabTwo, home, nil]];

    [self.navigationController pushViewController:self.tabBarController animated:YES];

    [home release];
    [tabTwo release];
    [tabOne release];

Так что, похоже, ошибка в этих строках кода. Потому что, если я только инициализирую tabOne-View без tabBar, все работает отлично и под iOS5. Но если я инициирую tabBar с этими строками кода, я получаю ошибку.

Может кто-нибудь объяснить мне, что не так с точки зрения iOS5, потому что этот код отлично работает под iOS4.

Обновление 2 (важно)

Итак, я думаю, что проблема в navController. Моя структура выглядит следующим образом: window-> navController-> tabBar.

И похоже, что под iOS4 приложение может получить доступ к navController в tabBarView, но не под iOS5.

Ответы [ 2 ]

2 голосов
/ 09 ноября 2011

Итак, я наконец-то узнал, как решить эту проблему.Но я не понимаю, почему это происходит только в iOS 5.

Так что проблема в том, что я хотел получить доступ к navController в viewDidLoad.На самом деле navController не связан до этого момента в iOS5.Вот почему возникает ошибка.Если я перемещаю фрагмент кода в viewWillAppear, все работает нормально.

Но почему это происходит только в iOS5 и почему оно работает в iOS4 с viewDidLoad?

Это последний вопрос, который все еще существует в моемhead.

Но теперь приложение работает на iOS5, и я отчасти счастлив; -)

2 голосов
/ 08 ноября 2011

Это логическая проблема.Контроллер навигации - это контейнер для контроллеров представления.Поэтому он не имеет представления, связанного с ним.Попробуйте что-то вроде этого:

UIView *currentView = [[myNavigationController visibleViewController] view];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...