2

У меня возникла проблема с моим проектом.Доступ к корневому UINavigationController из нажатого UIViewController

Каждый раз, когда я пытаюсь получить доступ к моему UINavigationController из Pushed UIViewController, я получаю «(null)» в качестве возврата.

Так что это мой проект структурирован:

1. AppDelegate.m initalises UINavigation Controller 
2. UINavigation Controller starts with Welcome Page 
3. Welcome Page Pushes New UIViewController on Button Press 
4. UIViewController returns (null) when self.navigationController called 

ОК, так что здесь какой-то код, в моей странице приветствия я звоню это:

MyClass *theChatRoom = [[MyClass alloc] initWithNibName:@"ChatRoom" bundle:nil]; 
[theChatRoom setTitle:[unitCode text]]; 
[self.navigationController pushViewController:theChatRoom animated:YES]; 

Который работает нормально, это толкает новый контроллер View.

Но в MyClass.m:

@implementation MyClass 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     NSLog([NSString stringWithFormat:@"%@",self.navigationController]); 
    } 
    return self; 
} 

Это возвращает (нуль)

Что я делаю неправильно?

ответ

2

Согласно документации, то navigationController из UIViewController:

Это свойство равно нулю, если контроллер представления не встроен в навигации контроллера а.

Вот сказал, если вы получаете доступ к navigationController перед вложением в UINavigationController (пока не толкать), он возвращает ноль. Таким образом, вы можете получить к нему доступ в viewDidLoad, но не в - (id)initWithNibName:bundle:.

+0

Хороший ответ. Однако я пытаюсь сделать это 'UIBarButtonItem * backButton = [[UIBarButtonItem alloc] initWithTitle: @« Back »style: UIBarButtonItemStyleBordered target: nil action: nil]; [[[навигационная система навигации] навигационная функция] setBackBarButtonItem: backButton]; 'и не может заставить его работать. Что дает? – Moe

+0

Nevermind, обнаружил, что вам нужно установить кнопку «Назад» в родительском контроллере просмотра, а не в сам контроллер просмотра. – Moe

+0

Просто сделал это в действительно сложном проекте и за то, чего он не заслужил, не назначал non nil на viewDidLoad. Может быть, какой-то уродливый взлом ниже в проекте, на котором я нахожусь. Попробуй это в чистом проекте. – cynistersix