0
UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController; 
AllListsViewController *controller = navigationController.viewControllers[0]; 
controller.dataModel = _dataModel; 

Это мой прежний код. Я могу получить доступ к AllListsViewController через navigationController, так как это rootViewController.Как получить доступ к UINavigationController (созданному в раскадровке) в AppDelegate.m

Но теперь моя раскадровка изменилась. Я попытался получить доступ к контроллеру таким же образом, но это не сработало.

SWRevealViewController *revealViewController = (SWRevealViewController *)self.window.rootViewController; 
UINavigationController *navigationController = (UINavigationController *)revealViewController.frontViewController; 
AllListsViewController *controller = navigationController.viewControllers[0]; 

controller.dataModel = _dataModel; 

Может быть, это потому, что я поставил frontViewController в раскадровке так что revealViewController.frontViewController равна нулю. Но я не знаю других способов доступа к нему из AppDelegate.m.

Извините, что не могу опубликовать изображения из-за моей репутации. Вот мой код. https://github.com/liukaiyi54/CheckList

Кто-нибудь мне помогает. Меня это пытали в течение нескольких дней.

Заранее благодарен!

+0

использования раскадровки ID и вызвать ваш контроллер представления на основе раскадровки ID –

+0

@ Г-н Т работает нормально. Спасибо. –

ответ

0

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

//This is Main unless you have named your storyboard something different 
    UIStoryboard *storyBoard =[ UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
    //make sure to put this in "AllListsViewController" in your identifier in the storyboard 
    UINavigationController *vc = [storyBoard instantiateViewControllerWithIdentifier:@"AllListsViewController"]; 
    UINavigationController *myNavigationController = [[UINavigationController alloc] initWithRootViewController:vc]; 
    self.window.rootViewController = myNavigationController; 

Здесь вы кладете раскадровки ID в синей коробке:

enter image description here

+0

Я попробовал, и это все равно не будет. Метод instantiateViewControllerWithIdentifier: создается новый контроллер, я думаю. Я не хочу новый, так как я уже создал его в своем раскадровке, и я не могу установить rootViewController снова, так как у меня уже есть rootViewController в раскадровке. Не уверен, правильно ли я это понимаю. Все, что я хотел сделать, это сохранить данные на iPhone. Я могу сделать это, не добавляя SWRevealViewController, но теперь я действительно потерялся. Может быть, вы можете увидеть мой код, если у вас есть время. Спасибо за ваш ответ! –

+0

Что именно вы пытаетесь сделать? AppDelegate обычно говорит, что ваше приложение переходит к представлению при запуске или при получении токена и т. Д. –

+0

Я только хотел сохранить данные. Я сделал это хорошо, прежде чем добавить SWRevealViewController. И теперь я полностью потерян. –

Смежные вопросы