Я уже читал кучу ответов на SO, но я немного смущен.View Controllers, Injection Dependency и init/viewDidLoad
У меня есть подкласс контроллера панели вкладок, который я создал, и в его viewDidLoad я создаю каждый из контроллеров представления. Тем не менее, у меня есть зависимость от того, что я перехожу в родительский элемент и, в свою очередь, в контроллер просмотра для каждой вкладки. Я передаю эту зависимость с помощью специального метода инициализации (NS_DESIGNATED_INITIALIZER, объявленного для него в заголовке). Однако, похоже, что [super init]
запускает viewDidLoad напрямую, поэтому зависимость не установлена должным образом при создании других контроллеров представлений.
Вот мой метод пользовательских инициализации:
- (instancetype)initWithSession:(T2Session *)session
{
self = [super init];
if (self) {
_session = session;
}
return self;
}
Я хотел session
быть установлены к тому времени я создаю контроллеры просмотра, но я вроде путать о том, что лучший способ сделать это , Любые советы очень ценятся. Заранее спасибо!
Вызов init не вызывает вызов viewDidLoad. Метод viewDidLoad вызывается для контроллера на первой вкладке, потому что контроллер панели вкладок добавляет представление контроллера в его представление. Ни один из других контроллеров не должен иметь viewDidLoad, пока вы не нажмете на их вкладку. – rdelmar
Хм ... Я установил точку останова в viewDidLoad моего контроллера панели вкладок, а трассировка стека указала прямо на мою строку 'self = [super init];' ... ... – Mason
Инициирование в любом контроллере не должно приводить непосредственно к представлению загружается. В случае контроллера панели вкладок его представление загружается (каким-то образом) системой, потому что это rootViewController окна, и это приводит к вызову viewDidLoad. – rdelmar