_UIFallbackPresentationViewController
Posted
技术标签:
【中文标题】_UIFallbackPresentationViewController【英文标题】: 【发布时间】:2012-08-24 09:24:03 【问题描述】:当我关闭通过点击 iPhone 上 UIWebView 中的 UIMenuController 上的定义打开的字典时,我不断收到以下错误:-
Unbalanced calls to begin/end appearance transitions for <: 0x10ab9640>.
在此错误之后,UIMenuController 将停止显示在任何 UIWebView 中。
有什么想法吗?
更新:该错误实际上是在打开字典视图时出现的,而不是在关闭它时。
更新 2: 错误是应用范围的。任何有可选文本的地方(即 webview、textview 等)我只能使用一次定义字典。出现此错误后,我必须退出应用程序并重新启动它才能使用字典。
【问题讨论】:
仅供参考。我可以在模拟器和设备上看到相同的警告,但之后菜单和字典对我仍然有效。 @Mike Weller:我希望对我来说也一样,我有两个应用程序。在一个应用程序中,字典和菜单都可以继续工作,尽管有警告。但是,对于第二个应用程序,字典在第一次之后停止工作。一旦字典出现,甚至无法让菜单再次显示。 你有什么疯狂的视图控制器层次结构吗?喜欢直接插入视图控制器视图而不使用正确的包含 API? 这也是我想到的第一件事。但是,那将是一个不。 对这个问题有很好的回答和讨论:***.com/questions/8751680/… 【参考方案1】:终于找到了答案。当系统呈现字典时,它的窗口会获得焦点(请参阅 UIWindow 中的 makeKeyAndVisible:),这很棒。当关闭保存字典的窗口没有正确地给主应用程序窗口返回焦点时,问题就出现了。
如果您在字典出现之前和之后打印出 [UIApplication sharedApplication].keyWindow,那么您将看到在您的应用程序窗口之前是 keyAndVisible 之前和之后它是一个不同的窗口。对我来说,我有一个单独的应用程序消息窗口,它位于状态栏的顶部,这就是字典被关闭后的 keyAndVisible。
因此,我所要做的就是在我的 UIWindow 子类中使用以下覆盖方法来错误地接收焦点:
- (void) makeKeyWindow
AppDelegate * appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate.window makeKeyAndVisible];
如果您没有自己的 UIWindow 来获得焦点,我不确定这将如何工作,但绝对最坏的情况是您可以添加一个虚拟的 UIWindow 来获得焦点并从上面添加完全相同的代码。
【讨论】:
“在我的 UIWindow 子类中有以下覆盖方法”是什么意思?我的项目中唯一的 UIWindow 出现在 appDelegate 中,如果我创建子类并放置函数并覆盖方法 makeKeyWindow,它将无法工作,因为 makeKeyWindow 进入无限递归。 :-S @Sufian 尝试使用 nslog 在字典被呈现和关闭后获取 [UIApplication sharedApplication].keyWindow 的结果。以下代码可能会有所帮助。 NSLog(@"%@", [UIApplication sharedApplication].keyWindow);在我的例子中,我使用了一个状态栏覆盖,它正在成为关键窗口。在我的状态栏覆盖类中注册 UIWindowDidBecomeKeyNotification 并在发布通知时调用上面提供的代码提示为我解决了这个问题。 我如何知道词典已被展示或关闭?不调用 viewWillAppear 和 viewWillDisappear 方法。你能详细说明一下吗? @Sufian NSLog 不需要保留在您的应用程序中,只需将其放在一个方法中(比如 UIButton 的 Action,您可以通过点击所述按钮调用它),您可以在之后以某种方式调用字典已提交和解雇。它的唯一目的是告诉您哪个窗口错误地获得了焦点。【参考方案2】:错误消息建议您开始转换,但缺少对相应结束方法的调用。
您是否尝试过不使用动画进行过渡? (animated:
NO
)
有时在使用 switch 语句和
忘记break;
如果您正在执行序列,请在-viewDidAppear
中执行,而不是在-viewWillAppear
中执行
希望对您有所帮助! :)
【讨论】:
感谢您的努力,但我不是在做过渡,系统是,因为字典是由默认系统 UIMenu 呈现的。任何有关如何从中删除动画的帮助将不胜感激。我没有 switch 语句,也没有执行序列。再次感谢您的努力! :-)以上是关于_UIFallbackPresentationViewController的主要内容,如果未能解决你的问题,请参考以下文章