警告:对 QLRemotePreviewContentController 的开始/结束外观转换的不平衡调用

Posted

技术标签:

【中文标题】警告:对 QLRemotePreviewContentController 的开始/结束外观转换的不平衡调用【英文标题】:Warning: Unbalanced calls to begin/end appearance transitions for QLRemotePreviewContentController 【发布时间】:2014-10-11 00:20:42 【问题描述】:

我已经找到了一些解决这个问题的方法(这是因为还有一个活动的动画)。

但在 iPad 应用程序上使用 UIDocumentInteractionController 时,我无法在我的应用程序中解决该问题。

我的 ViewController 看起来像

主视图控制器 -> 容器视图

在这个 ContainerView 中我有一个侧边栏,我想从这个侧边栏中打开一个 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 秒!)仍然有这个警告。

编辑:发现我的 ContainerView 可能有问题。当我包含“ViewWillDissapear”和“ViewDidDisappear”时,这里会出现错误:

view will dissappear

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

viww Did dissapaer

有什么想法吗?提前致谢

【问题讨论】:

这可能是苹果代码中的一个错误,因为我在他们的示例代码中也看到了这个警告。请提交错误! 谢谢。那可能真的只是一个愚蠢的错误 我也有类似的问题.....你提交了雷达吗? 不抱歉。我认为这真的只是一个错误 Thomas Deniau 如果你有,请给我苹果代码链接。 【参考方案1】:

您的应用程序必须使用导航控制器。如果是这种情况,导航控制器必须是处理预览交互的控制器,而不是其中的视图控制器。

documentInteractionControllerViewControllerForPreview 内部的return self 替换为self.navigationController 应该可以解决问题。但是,您需要安全地打开 navigationController。完整方法见下方:

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

感谢 @staxim 的 Objective-C 解决方案!

【讨论】:

如果你传递一个导航控制器,它会将你的视图推送到导航堆栈中,否则会以模态方式呈现。我想从控制台中删除该警告,但它破坏了我的应用程序。我隐藏了我的导航栏,它让它出现,打破了我所有的限制等等......这绝对只是一个警告。 @Crazyrems - 是的,这是一个副作用。它并没有阻止我的约束,而是在导航控制器中呈现了视图。这不是我想要的,所以我恢复了它并忽略了警告。但是,有些人会希望在导航控制器中显示视图 - 因此是答案。 您可以使用return self.navigationController ?? self来简单地编写代码。【参考方案2】:

我遇到了同样的问题,结果是我视图的 UINavigationController 有问题。我通过更改 documentInteractionControllerViewControllerForPreview 方法解决了这个问题:

- (UIViewController *)documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController *)controller

    return [self navigationController];

【讨论】:

【参考方案3】:

我认为这是因为变量documentInteractionController 只存在于openFile 函数的范围内。一旦函数被执行,变量就会被垃圾回收,因此不可能注册结束外观转换。

您可以尝试将局部变量提升为类变量。

【讨论】:

感谢您的回复!我试过这个,但我收到同样的错误。这可能是一个问题,因为我的 MainViewController 中有一个 ContainerView? 我现在更改了我的 NSNotification 并调用了从我的 DetailViewController(在我的 ContainerView 内)打开我的 UIDocumentInteraction 的函数 - 但仍然得到相同的“警告”。 我同意,警告仍然出现在我面前。 UIDocumentInteractionController 也是一个类变量。

以上是关于警告:对 QLRemotePreviewContentController 的开始/结束外观转换的不平衡调用的主要内容,如果未能解决你的问题,请参考以下文章

仅对部分代码禁用 PHP 警告

禁止对 Visual Studio 中的所有项目发出警告

为啥 c++ 编译器不会警告返回对局部变量的引用?

Xcode警告汇总分析

对某些案例问题做出反应警告计算匹配?

无效的休眠警告? '@Access(AccessType.PROPERTY) 对字段无效'