В принципе, я пытаюсь реализовать Быстрые действия в моем приложении. Когда я нажимаю на одном из быстрых действий, я получаю ошибку:Предупреждение: попытка представления ViewController, чей ViewController не находится в иерархии представлений (3D Touch)
Warning: Attempt to present theViewController on ViewController whose view is not in the window hierarchy!
Я смотрел на некоторые другие должности Stack Over Flow, которые имели один и тот же вопрос, но решения не работает для меня. Кроме того, в моем applicationDidEnterBackground
метод, который я добавил self.window?.rootViewController?.dismissViewControllerAnimated(true, completion: nil).
Вот некоторые из соответствующих 3D методов сенсорного, которые я включил в App Делегат:
func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void) {
let handledShortcutItem = self.handleShortuctItem(shortcutItem)
completionHandler(handledShortcutItem)
}
Кроме того, у меня есть эти вспомогательные методы:
enum ShortcutIdentifier: String {
case First
case Second
init?(fullType: String) {
guard let last = fullType.componentsSeparatedByString(".").last else { return nil }
self.init(rawValue: last)
}
var type: String {
return NSBundle.mainBundle().bundleIdentifier! + ".\(self.rawValue)"
}
}
func handleShortuctItem(shortcutItem: UIApplicationShortcutItem) -> Bool {
var handled = false
guard ShortcutIdentifier(fullType: shortcutItem.type) != nil else { return false }
guard let shortcutType = shortcutItem.type as String? else { return false }
switch(shortcutType) {
case ShortcutIdentifier.First.type:
handled = true
let navVC = mainStoryboard.instantiateViewControllerWithIdentifier("firstViewController") as! FirstViewController
self.window?.rootViewController?.presentViewController(navVC, animated: true, completion: nil)
break
case ShortcutIdentifier.Second.type:
handled = true
let navVC = mainStoryboard.instantiateViewControllerWithIdentifier("secondViewController") as! SecondViewController
self.window?.rootViewController?.presentViewController(navVC, animated: true, completion: nil)
break
default:
break
}
return handled
}
@matt Я отредактировал мое сообщение, чтобы показать код. Есть идеи? – Harish
Это может помочь: http://useyourloaf.com/blog/adding-3d-touch-quick-actions.html Проблема может заключаться в том, что интерфейс не появился в то время, когда вы запускаете свой ярлык. – matt
@matt Хорошо, но с 3D Touch мне нужно, чтобы он работал всегда, потому что я не знаю, когда пользователь нажимает на быстрое действие, и мне нужно, чтобы он работал, когда они это делают. – Harish