2017-01-20 4 views
0

Мое приложение - однонаправленный NavigationController в качестве приложения стиля контроллера корневого представления. В нем у меня есть несколько различных ярлыков для использования 3D Touch. У меня все они настроены в Info.plist (я делал это раньше с помощью приложения Tab Bar, и он работал нормально), но он срабатывает каждый раз при нажатии на ярлык. Вот мой код, используемый в AppDelegate в Obj-C.3D Touch для ярлыков Сбой

- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler { 
    UINavigationController *nav = (UINavigationController *) self.theMainView.view; 

    NSLog(@"%@", shortcutItem.type); 
    if ([shortcutItem.type isEqualToString:@"com.316apps.Fritch.inviteFriends"]) { 
     ImagePicker *vimeo= [[ImagePicker alloc] init]; 
     [nav pushViewController:vimeo animated:YES]; 

    } 
    if ([shortcutItem.type isEqualToString:@"com.316apps.Fritch.viewAlerts"]) { 

     NewsViewController *dvController8 = [[NewsViewController alloc] initWithNibName:@"NewsViewController" bundle:[NSBundle mainBundle]]; 
     [nav pushViewController:dvController8 animated:YES]; 

    } 
    if ([shortcutItem.type isEqualToString:@"com.316apps.Fritch.viewDirectory"]) { 

     DirectoryViewController *dvController8 = [[DirectoryViewController alloc] init]; 
     [nav pushViewController:dvController8 animated:YES]; 


    } 


} 

Краш Log:

com.316apps.Fritch.viewDirectory 
2017-01-19 22:44:23.305906 Fritch[3956:925348] -[UILayoutContainerView pushViewController:animated:]: unrecognized selector sent to instance 0x101837530 
2017-01-19 22:44:23.306768 Fritch[3956:925348] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UILayoutContainerView pushViewController:animated:]: unrecognized selector sent to instance 
+0

Пожалуйста, добавьте журнал аварий. – nynohu

+0

Вы на 100% уверены, что 'ImagePicker' является viewController? Именование по сравнению с другими означает, что это взгляд. Все ваши другие контроллеры имеют схему: 'someViewController', а не просто' some'. Если мы придерживаемся вашей конвенции, тогда это должен быть «ImagePickerViewController». Поэтому почему я спрашиваю, это ошибка? – Brandon

+0

@Brandon Это контроллер вида. Я обновляю это приложение, и он использовался как контроллер панели вкладок. Хотя это был контроллер панели вкладок, мне удалось получить текущую вкладку, инициализировать ее как контроллер корневого представления и нажать на любой вид, который мне нужен. Эти ярлыки отлично работали над этим, мне просто нужно выяснить, что делать, чтобы он работал прямо на UINavigationController в качестве корня вместо вкладки. – user717452

ответ

1
UINavigationController *nav = (UINavigationController *) self.theMainView.view; 

Причина сбою это вы получаете view, не ViewController. Таким образом, self.theMainView.view не может конвертировать в UINavigationController. Если ваш self.theMainView прав, исправьте этот сбой:

UINavigationController *nav = (UINavigationController *) self.theMainView; 
+0

SMH, спасибо ... длинный день – user717452

+0

Добро пожаловать. Кстати, не забудьте добавить аварийный журнал, если ваша проблема связана с сбоем приложения в следующий раз, когда вы хотите спросить. – nynohu

+0

У меня есть несколько связанная, несколько другая проблема. Для DirectoryViewController, который появляется на ярлыке, я защищаю его паролем. Если пароль не был введен, он закрывает это основное представление с UIView, который существует в IB. Когда я делаю ярлык, я получаю приглашение для Touch ID, но он не добавляет этого subview. Вот как это называется: ' [self.navigationController.view addSubview: password]; [self.navigationController.view bringSubviewToFront: password]; 'Это из-за self.navigationController, а не вид? – user717452

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