由于意外崩溃,3D Touch 快捷方式将无法使用
3D Touch shortcuts won't work due to Unexpected Crash
我正在尝试将 3D Touch 快捷方式 添加到应用程序,我在使用 3DTouch 时设法让快捷方式出现主屏幕中的应用程序图标;然而,当使用快捷方式时,应用程序在加载时崩溃,我不确定为什么。
我已经设法让应用程序加载书签快捷方式,但它不会启动 BookmarksViewController
,它只会加载 InitialViewController
。
该应用程序嵌入在每个选项卡的 UITabBarController
和 UINavigationController
中。我尝试加载的两个视图控制器位于不同的选项卡中,但导航控制器堆栈中的第一个视图。
有谁知道我错在哪里?
info.plist 文件
应用代理
enum ShortcutItemType: String {
case Bookmarks
case Favourites
init?(shortcutItem: UIApplicationShortcutItem) {
guard let last = shortcutItem.type.componentsSeparatedByString(".").last else { return nil }
self.init(rawValue: last)
}
var type: String {
return NSBundle.mainBundle().bundleIdentifier! + ".\(self.rawValue)"
}
}
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
if let shortcutItem = launchOptions?[UIApplicationLaunchOptionsShortcutItemKey] as? UIApplicationShortcutItem {
handleShortcutItem(shortcutItem)
}
return true
}
private func handleShortcutItem(shortcutItem: UIApplicationShortcutItem) {
if let rootViewController = window?.rootViewController, let shortcutItemType = ShortcutItemType(shortcutItem: shortcutItem) {
let sb = UIStoryboard(name: "main", bundle: nil)
let favouritesVC = sb.instantiateViewControllerWithIdentifier("FavouritesVC") as! FavouritesTableViewController
let bookmarksVC = sb.instantiateViewControllerWithIdentifier("BookmarksVC") as! BookmarksNotesViewController
switch shortcutItemType {
case .Bookmarks:
rootViewController.presentViewController(bookmarksVC, animated: true, completion: nil)
break
case .Favourites:
rootViewController.presentViewController(favouritesVC, animated: true, completion: nil)
break
}
}
}
func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void) {
handleShortcutItem(shortcutItem)
}
}
故事板 ID
这些是视图控制器的 StoryboardID。
我想你忘记了 com.appName.Bookmark
中的 's'
或者您需要从此处的书签中删除 's':
enum ShortcutItemType: String {
case Bookmarks
case Favourites
相反,尝试使用这样的快捷方式:
if shortcutItem.type == "com.appName.Bookmark"
@available(iOS 9.0, *)
func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void) {
if shortcutItem.type == "com.appName.Bookmark" {
}
}
我正在尝试将 3D Touch 快捷方式 添加到应用程序,我在使用 3DTouch 时设法让快捷方式出现主屏幕中的应用程序图标;然而,当使用快捷方式时,应用程序在加载时崩溃,我不确定为什么。
我已经设法让应用程序加载书签快捷方式,但它不会启动 BookmarksViewController
,它只会加载 InitialViewController
。
该应用程序嵌入在每个选项卡的 UITabBarController
和 UINavigationController
中。我尝试加载的两个视图控制器位于不同的选项卡中,但导航控制器堆栈中的第一个视图。
有谁知道我错在哪里?
info.plist 文件
应用代理
enum ShortcutItemType: String {
case Bookmarks
case Favourites
init?(shortcutItem: UIApplicationShortcutItem) {
guard let last = shortcutItem.type.componentsSeparatedByString(".").last else { return nil }
self.init(rawValue: last)
}
var type: String {
return NSBundle.mainBundle().bundleIdentifier! + ".\(self.rawValue)"
}
}
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
if let shortcutItem = launchOptions?[UIApplicationLaunchOptionsShortcutItemKey] as? UIApplicationShortcutItem {
handleShortcutItem(shortcutItem)
}
return true
}
private func handleShortcutItem(shortcutItem: UIApplicationShortcutItem) {
if let rootViewController = window?.rootViewController, let shortcutItemType = ShortcutItemType(shortcutItem: shortcutItem) {
let sb = UIStoryboard(name: "main", bundle: nil)
let favouritesVC = sb.instantiateViewControllerWithIdentifier("FavouritesVC") as! FavouritesTableViewController
let bookmarksVC = sb.instantiateViewControllerWithIdentifier("BookmarksVC") as! BookmarksNotesViewController
switch shortcutItemType {
case .Bookmarks:
rootViewController.presentViewController(bookmarksVC, animated: true, completion: nil)
break
case .Favourites:
rootViewController.presentViewController(favouritesVC, animated: true, completion: nil)
break
}
}
}
func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void) {
handleShortcutItem(shortcutItem)
}
}
故事板 ID
这些是视图控制器的 StoryboardID。
我想你忘记了 com.appName.Bookmark
中的 's'或者您需要从此处的书签中删除 's':
enum ShortcutItemType: String {
case Bookmarks
case Favourites
相反,尝试使用这样的快捷方式:
if shortcutItem.type == "com.appName.Bookmark"
@available(iOS 9.0, *)
func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void) {
if shortcutItem.type == "com.appName.Bookmark" {
}
}