警告:对 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 的开始/结束外观转换的不平衡调用的主要内容,如果未能解决你的问题,请参考以下文章