Подтвердить что ты не робот

Предупреждение: неуравновешенные вызовы для перехода к началу/концу отображения для QLRemotePreviewContentController

Я уже нашел некоторые решения для этой проблемы (вызвано тем, что все еще есть активная анимация).

Но я не могу решить это в своем приложении при использовании UIDocumentInteractionController в приложении iPad.

My ViewController выглядит как

MainViewController - > ContainerView

В этом ContainerView у меня есть боковая панель, и из этого SideBar я хотел бы открыть UIDocumentInteractionController.

Я использую NSNotification, потому что этот "MainViewController" должен обрабатывать несколько файлов из разных представлений.

Итак: (это в моем MainViewController)

func openFile(notification: NSNotification){

    fileUrl = notification.object as NSURL

    var documentInteractionController = UIDocumentInteractionController(URL: self.fileUrl!)
    documentInteractionController.delegate = self

    documentInteractionController.presentPreviewAnimated(false)
}

func documentInteractionControllerViewControllerForPreview(controller: UIDocumentInteractionController) -> UIViewController {
    return self
}

Но плохо всегда возникает следующая ошибка:

Предупреждение: неуравновешенные вызовы для перехода на начало/конец для QLRemotePreviewContentController

Я не знаю почему? Не должно быть анимации, и если я открою другое (модальное) окно, здесь нет предупреждений.

Если я использую задержку (например, за 5 секунд!), это предупреждение.

Изменить: обнаружено, что я могу быть проблемой с моим контейнером. Когда я включаю "ViewWillDissapear" и "ViewDidDisappear", плохо получим ошибку здесь:

view will dissappear

Unbalanced calls to begin/end appearance transitions for <QLRemotePreviewContentController: 0x7d35d400>

viww Did dissapaer

Любые идеи? Спасибо заранее

4b9b3361

Ответ 1

Ваше приложение должно использовать навигационный контроллер. Если это так, навигационный контроллер должен быть обработан для предварительного просмотра, а не для контроллера вида.

Замена return self внутри documentInteractionControllerViewControllerForPreview на self.navigationController должна решить проблему. Однако вам необходимо безопасно распаковать navigationController. См. Полный метод ниже:

func documentInteractionControllerViewControllerForPreview(controller: UIDocumentInteractionController) -> UIViewController {
    if let navigationController = self.navigationController {
        return navigationController
    } else {
        return self
    }
}

Cudos to @staxim для решения Objective-C!

Ответ 2

У меня была такая же проблема, и это оказалось проблемой с UINavigationController моего представления. Я обратился к нему, изменив метод documentInteractionControllerViewControllerForPreview:

- (UIViewController *)documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController *)controller
{
    return [self navigationController];
}

Ответ 3

Я думаю, что это потому, что переменная documentInteractionController живет только в области openFile. Как только функция будет выполнена, переменная будет собрана мусором, и, следовательно, невозможно зарегистрировать переход внешнего вида.

Вы можете попытаться повысить локальную переменную, чтобы стать переменной класса.