私は成功したアプリデリゲートにこのコードを使用して、ホーム画面から3Dタッチのショートカットを実装しました:3Dタッチ:現在のVCから提示
@objc(application:performActionForShortcutItem:completionHandler:) @available(iOS 9.0, *)
func application (_ application: UIApplication, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler completionHandle: @escaping (Bool) -> Void) {
if shortcutItem.type == "com.myAppName.addtask" {
let storyBoard = UIStoryboard(name: "Main", bundle: nil)
let editorVC = storyBoard.instantiateViewController(withIdentifier: "myVC_ID") as! myVC_Class
let rootVC = UIApplication.shared.keyWindow?.rootViewController
rootVC?.present(editorVC, animated: false, completion: {() -> Void in
completionHandle(true)
})
}
}
はしかし、問題は、それが常にから提示を期待するということですルートviewController。ユーザーがアプリにあったし、最後のビューがルートVC、ホーム画面からショートカットだった場合
Warning: Attempt to present xxx on (xxxx.ViewController: 0x7f9acc83e000) whose view is not in the window hierarchy!
:ユーザーが別のVCからアプリを残して、ショートカットをしようとすると、私はこのエラーを取得しますよく働く。それでは、どのようにしてVCを最後に使用したかにかかわらず、それをうまく動作させる方法は?
ありがとうございました。私はそれが私の質問だと思うが、シナリオは、ルートビューコントローラがVC2を提示していることを知っている、その後、ユーザーは、3D Touchのショートカットに戻ろうとすると、そのエラーメッセージが表示されます。だから私は自分のコードを他のVC ORから提示するように変更するにはどうしたらよいですか?これはさらに元気で、元のVCに戻ってコールしてからそれを提示します。 –
ええと、 'presentViewController'について尋ねますか?これはトリックの質問ですか? – matt
最後のコメントは、削除したばかりです。それは今働いている。ありがとうございました。 –