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
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.
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
È possibile fornire la traccia dello stack per l'arresto anomalo? –