用于快捷方式崩溃的 3D Touch
3D Touch for Shortcuts Crashes
我的应用是一个单视图 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
UINavigationController *nav = (UINavigationController *) self.theMainView.view;
崩溃的原因是您得到的是 view
,而不是 ViewController
。所以 self.theMainView.view
无法转换为 UINavigationController
。如果您的 self.theMainView 是正确的,请使用以下方法修复该崩溃:
UINavigationController *nav = (UINavigationController *) self.theMainView;
我的应用是一个单视图 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
UINavigationController *nav = (UINavigationController *) self.theMainView.view;
崩溃的原因是您得到的是 view
,而不是 ViewController
。所以 self.theMainView.view
无法转换为 UINavigationController
。如果您的 self.theMainView 是正确的,请使用以下方法修复该崩溃:
UINavigationController *nav = (UINavigationController *) self.theMainView;