2016-01-06 3 views
9

Я пытаюсь добавить 3D касание Ярлыки к приложению, мне удалось иметь появляются ярлыки при использовании 3DTouch на значке приложения из стола ; однако при использовании ярлыка приложение падает при загрузке, и я не уверен, почему.3D ярлыков сенсорных не будут работать из-за неожиданную аварией

Мне удалось получить приложение для загрузки ярлыков закладок, но оно не инициирует BookmarksViewController, оно просто загружает InitialViewController.

Приложение помещено в пределах UITabBarController и UINavigationController для каждой вкладки. Оба контроллера просмотра, которые я пытаюсь загрузить, находятся на разных вкладках, но первый вид в стеке контроллера навигации.

Кто-нибудь знает, где я иду не так?

info.plist файл

enter image description here

App Делегат

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 для вида контроллеров.

enter image description here enter image description here

+0

Я сделал то же самое с моим проектом, после проверки кода, единственное различие заключается в том, что я возвращаю false после обращения к ярлыку в методе appDidFinishLaunchWithOption, чтобы предотвратить его выполнение методом itemActionForShortcut. Вы можете попробовать. – Surely

+2

Можете ли вы предоставить трассировку стека для сбоя? –

ответ

5

Я думаю, что вы забыли 'S' в com.appName.Bookmark

enter image description here

Или вам нужно удалить 'S' из Bookmarks здесь:

enum ShortcutItemType: String { 

case Bookmarks 
case Favourites 
2

Вместо этого попробуйте использовать ярлык следующим образом:

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" { 

    } 
}