快捷方式的 3D Touch 崩溃
Posted
技术标签:
【中文标题】快捷方式的 3D Touch 崩溃【英文标题】:3D Touch for Shortcuts Crashes 【发布时间】:2017-01-20 04:29:14 【问题描述】:我的应用是作为根视图控制器样式应用的单视图 NavigationController。在其中,我有一些使用 3D Touch 的不同快捷方式。我将它们全部设置在 Info.plist 中(我之前使用 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
【问题讨论】:
请添加崩溃日志。 你100%确定ImagePicker
是一个viewController吗?与其他命名相比,它表明这是一个视图。你所有的其他控制器都有这个方案:someViewController
而不仅仅是some
。如果我们遵守您的约定,那么它应该是ImagePickerViewController
。因此,我为什么要问,这是一个错误吗?
@Brandon 它是一个视图控制器。我正在更新这个应用程序,它曾经是一个标签栏控制器。虽然它是一个标签栏控制器,但我能够获取当前标签,将其初始化为根视图控制器,然后将我需要的任何视图推送到它上面。这些快捷方式在这方面工作得很好,我只需要弄清楚如何让它在 UINavigationController 作为根而不是选项卡上正常工作。
@nynohu 我添加了崩溃日志
【参考方案1】:
UINavigationController *nav = (UINavigationController *) self.theMainView.view;
崩溃的原因是你得到的是view
,而不是ViewController
。所以self.theMainView.view
不能转换为UINavigationController
。如果您的 self.theMainView 是正确的,请使用以下方法修复该崩溃:
UINavigationController *nav = (UINavigationController *) self.theMainView;
【讨论】:
不客气。对了,如果您的问题是应用崩溃,请记得添加崩溃日志,下次您要询问时。 我确实有一个有点相关,有点不同的问题。对于快捷方式上出现的 DirectoryViewController,我对其进行了密码保护。如果尚未输入密码,它会使用 IB 中存在的 UIView 覆盖该主视图。当我执行快捷方式时,会提示输入 Touch ID,但它不会添加该子视图。它是这样被调用的:` [self.navigationController.view addSubview:password]; [self.navigationController.view bringSubviewToFront:password];` 这是因为 self.navigationController 不是视图吗? 在我看来,你应该得到ViewController
,而不是navigationController
,而不是addSubView
。你能试试吗?
我在***.com/questions/41756488/… 提出了一个新问题我已经尝试了self.view addSubview以上是关于快捷方式的 3D Touch 崩溃的主要内容,如果未能解决你的问题,请参考以下文章
App Shortcuts 快捷方式 Android7.1 的"3D Touch"
3D touch快捷应用:didfinishlaunchingwithoptions:performActionForShortcutItem:执行顺序