2016-01-06 26 views
9

Sto provando ad aggiungere 3D touch Scorciatoie a un'applicazione, sono riuscito ad avere compaiono i tasti di scelta rapida quando si utilizza 3DTouch sull'icona dell'app dal homescreen ; tuttavia quando si utilizza il collegamento l'applicazione si blocca durante il caricamento e non sono sicuro del perché.scorciatoie tocco 3D non funziona a causa di crash imprevisto

Sono riuscito a caricare l'applicazione per il collegamento dei segnalibri ma non avvia lo BookmarksViewController, carica solo il InitialViewController.

L'applicazione è incorporata in un UITabBarController e un UINavigationController per ogni scheda. Entrambi i controller di vista che sto tentando di caricare si trovano in diverse schede ma la prima vista nello stack del controller di navigazione.

Qualcuno sa dove sto andando male?

file Info.plist

enter image description here

App Delegato

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) 
} 

} 

Storyboard ID

Questi sono i StoryboardID per la vista controller.

enter image description here enter image description here

+0

ho fatto esattamente stessa cosa con il mio progetto, dopo aver controllato il codice, l'unica differenza è che io "return false" dopo gestire l'elemento di collegamento in modo appDidFinishLaunchWithOption per evitare che l'esecuzione del metodo oggetto performActionForShortcut. Puoi provarlo – Surely

+2

È possibile fornire la traccia dello stack per l'arresto anomalo? –

risposta

5

penso che hai dimenticato la 's' in com.appName.Bookmark

enter image description here

o è necessario rimuovere la 's' dal Preferiti qui:

enum ShortcutItemType: String { 

case Bookmarks 
case Favourites 
2

Invece, provare a utilizzare una scorciatoia come questa:

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

    } 
}