Ios 3D触控,快捷方式崩溃

Ios 3D触控,快捷方式崩溃,ios,objective-c,uinavigationcontroller,3dtouch,Ios,Objective C,Uinavigationcontroller,3dtouch,我的应用程序是一个单视图导航控制器,作为根视图控制器样式的应用程序。在里面,我有几个不同的使用3D触摸的快捷方式。我在Info.plist fine中设置了它们(我以前用Tab Bar应用程序设置过,效果很好),但每次按下快捷操作时它都会崩溃。下面是我在Obj-C中的AppDelegate中使用的代码 - (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortc

我的应用程序是一个单视图导航控制器,作为根视图控制器样式的应用程序。在里面,我有几个不同的使用3D触摸的快捷方式。我在Info.plist fine中设置了它们(我以前用Tab Bar应用程序设置过,效果很好),但每次按下快捷操作时它都会崩溃。下面是我在Obj-C中的AppDelegate中使用的代码

- (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];


    }


}
事故日志:

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
崩溃的原因是您得到的是
视图
,而不是
视图控制器
。因此,
self.theMainView.view
无法转换为
UINavigationController
。如果self.theMainView正确,请使用以下方法修复该崩溃:

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

请添加崩溃日志。您是否100%确定
ImagePicker
是viewController?与其他名称相比,命名表明这是一种观点。所有其他控制器都有此方案:
someViewController
,而不仅仅是
some
。如果我们遵守您的约定,那么它应该是
ImagePickerViewController
。因此我要问的是,这是一个错误吗?@Brandon它是一个视图控制器。我正在更新这个应用程序,它曾经是一个选项卡栏控制器。虽然它是一个选项卡栏控制器,但我能够获取当前选项卡,将其初始化为根视图控制器,并将所需的任何视图推送到该选项卡上。这些快捷方式在这方面工作得很好,我只需要弄清楚如何使它作为根目录而不是选项卡在UINavigationController上正常工作。@nynohu我已经添加了崩溃日志欢迎您。顺便说一句,如果你的问题是应用程序在下次你想问的时候崩溃,请记得添加崩溃日志。我确实有一个有点相关,有点不同的问题。对于快捷方式上出现的DirectoryViewController,我对其进行了密码保护。如果未输入密码,则会使用IB中存在的UIView来覆盖主视图。当我执行快捷方式时,会提示输入触摸ID,但不会添加该子视图。它的名称如下:`[self.navigationController.view addSubview:password];[self.navigationController.view将子视图带到前面:密码];`这是因为self.navigationController不是视图吗?在我看来,对于
addSubView
,您应该获得
ViewController
,而不是
navigationController
。你能试试吗?我继续问了一个新问题,我已经试过self.view addSubview了
UINavigationController *nav = (UINavigationController *) self.theMainView;