2017-11-23 4 views
0

Ich bin aus irgendeinem Grund einige Probleme herauszufinden, die Verknüpfung in meiner App. Ich habe alle Tutorials verfolgt und glaube, dass ich alles richtig gemacht habe; es verhält sich jedoch wirklich komisch. Das Problem ist, dass, wenn Sie diese App vollständig schließen und den 3D-Touch-Shortcut-Eintrag auf dem Startbildschirm ausführen, Sie zum korrekten Teil der App gelangen, wie es sollte; Wenn die App jedoch im Hintergrund geöffnet ist (so wie Sie einfach auf die Home-Schaltfläche klicken), gelangen Sie nicht zum richtigen Teil der App, sondern öffnen sie einfach. Das ist wirklich merkwürdig und ich bin mir nicht sicher, was ich tun soll, weil ich alle Anweisungen befolgt habe. Ich danke dir sehr!Shortcuts Elemente, schnelle Aktionen 3D Touch swift

Code:

func application(_ application: UIApplication, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) { 

    if shortcutItem.type == "com.myapp.newMessage" { 

     let sb = UIStoryboard(name: "Main", bundle: nil) 


     let vc = sb.instantiateViewController(withIdentifier: "RecentVC") as! UITabBarController 
     vc.selectedIndex = 2 //this takes me to the contacts controller 



     let root = UIApplication.shared.keyWindow?.rootViewController 

     root?.present(vc, animated: false, completion: { 
      completionHandler(true) 
     }) 


    } else if shortcutItem.type == "com.myapp.groups" { 
     let sb = UIStoryboard(name: "Main", bundle: nil) 


     let vc = sb.instantiateViewController(withIdentifier: "RecentVC") as! UITabBarController 
     vc.selectedIndex = 1 //this takes me to the groups controller 

     let root = UIApplication.shared.keyWindow?.rootViewController 

     root?.present(vc, animated: false, completion: { 
      completionHandler(true) 
     }) 

    } else { 
     //more short cut items I will add later 
    } 
} 

Hinweis: Dies sind statische Shortcut Artikel, und ich konfigurierte sie in der Datei info.plist, Diese Funktion, die vorgestellt wurde der einzige Ort in der App neben der info.plist Datei die etwas über die Shortcuts haben.

EDIT: Dies scheint ein Problem mit der RootViewController, weil ich mehrere verschiedene Wege, dies zu tun versucht haben, und es gibt mir immer noch die gleiche Warnmeldung

2017.11.22 22: 36: 46.473195- 0800 QuickChat2.0 [3055: 1068642] Warnung: Versuch zu präsentieren, wessen Sicht nicht in der Fensterhierarchie ist!

Ich habe gerade versucht, meine Ziele auf diese Weise through this post zu erreichen, aber es gibt mir die gleichen Ergebnisse wie zuvor.

+0

Haben Sie überprüft, ob "root" ist nil (unter den Umständen, wo nichts passiert)? Wenn es nicht Null ist, haben Sie versucht, eine verzögerte Leistung hinzuzufügen, um zu sehen, ob das hilft? – matt

+0

Wie finde ich heraus, ob es null ist? – Jaqueline

+0

Verwenden Sie den Debugger, Protokollierung einfügen, was auch immer. Es gibt keine Notwendigkeit für das Raten in der Programmierung; Sie können sehen, was Ihre Variablen bei jedem Schritt sind. – matt

Antwort

0

Sie sollten eine Variable in Ihrem performActionForShortcutItem setzen, die Ihnen den Shortcut-Typ mitteilt und den Code, den Sie dort haben, in applicationDidBecomeActive verschieben. Sie könnten so aussehen

var shortcut: String? 

func applicationDidBecomeActive(application: UIApplication) { 
    if let shortcutItem = shortcut { 
     shortcut = nil 
     if shortcutItem == "com.myapp.newMessage" { 
      let sb = UIStoryboard(name: "Main", bundle: nil) 
      let vc = sb.instantiateViewController(withIdentifier: "RecentVC") as! UITabBarController 
      vc.selectedIndex = 2 //this takes me to the contacts controller 
      let root = UIApplication.shared.keyWindow?.rootViewController 
      root?.present(vc, animated: false, completion: nil) 
     } else if shortcutItem == "com.myapp.groups" { 
      let sb = UIStoryboard(name: "Main", bundle: nil) 
      let vc = sb.instantiateViewController(withIdentifier: "RecentVC") as! UITabBarController 
      vc.selectedIndex = 1 //this takes me to the groups controller 
      let root = UIApplication.shared.keyWindow?.rootViewController 
      root?.present(vc, animated: false, completion: nil) 
     } else { 
      //more short cut items I will add later 
     } 
    } 
} 

func application(_ application: UIApplication, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) { 
    shortcut = shortcutItem.type 
    completionHandler(true) 
} 
+0

Ich habe es gerade ausprobiert und es funktioniert überhaupt nicht, auch wenn ich die App schließe, wie es mir gerade geht. – Jaqueline

+0

Können Sie Haltepunkte setzen und sehen, wo es scheitert? – Malik

+0

Ich bin mir nicht sicher, warum mein Ding nicht funktioniert. Ich habe die Tutorials genau verfolgt und wie sie es gemacht haben, und es hat vollkommen gut für sie funktioniert. Ich sehe nicht, was das Problem ist. – Jaqueline

Verwandte Themen