2016-10-30 4 views
0

Я успешно реализован ярлык 3D сенсорный с домашнего экрана, используя этот код в приложение делегата:3D Touch: Представление из текущего 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) 
     }) 
    } 
} 

Однако, проблема заключается в том, что она всегда ожидают представить от root viewController. Если пользователь покидает приложение из другого VC, а затем пытается ярлык, я получаю эту ошибку:

Warning: Attempt to present xxx on (xxxx.ViewController: 0x7f9acc83e000) whose view is not in the window hierarchy!

Если пользователь был в приложении и последний вид был корень VC, ярлык на главном экране прекрасно работает. Итак, как я могу это сделать, чтобы он отлично работал независимо от того, что последний раз использовал VC?

ответ

1

Принцип того, что вы делаете, абсолютно прав. Так почему же он не работает?

Что бы я сделал, это сделать контроллер представления корневого окна контроллера контроллера контейнера, который никогда не не перемещается - все действия происходят внутри него. Таким образом, единственный способ, которым контроллер корневого окна окна не находится в иерархии окон, состоит в том, что он имеет представленный контроллер представления. И вы можете легко найти это, начиная с выяснения, есть ли у него представленный контроллер представления, и если да, то от , что.

+0

Благодарим за быстрый ответ. Я предполагаю, что это мой вопрос, хотя, я знаю, сценарий заключается в том, что контроллер корневого представления представляет VC2, затем пользователь уходит, пытается вернуться в 3D Touch, и я получаю это сообщение об ошибке. Итак, как мне изменить свой код для представления из другого VC OR, и это еще лучше, вернитесь к/вызовите разматывание назад к корневому VC, а затем откройте его. –

+0

Э-э-э-э-э-э-э-э-э-э ... Это вопрос с подвохом? – matt

+0

Не считая последнего комментария, я просто удалил его. Теперь работает. Спасибо. –

 Смежные вопросы

  • Нет связанных вопросов^_^