调用OpenGC后关闭Game Center出现状态栏恢复及扩展请求取消错误
解决方案:Game Center关闭后出现的状态栏和扩展取消错误
看起来你遇到的是关闭Game Center后,界面表现正常但后台抛出错误日志的问题,我来帮你拆解这两个错误并给出对应的解决思路:
1. 处理 yowza! restored status bar too many times! 警告
这个日志通常是因为代码重复触发了状态栏恢复操作。打开Game Center时系统会自动隐藏状态栏,关闭时如果你的App(或是OpenGC库)多次调用状态栏显示的方法,就会触发这个警告。
解决方法:
- 检查Game Center关闭的回调代码(比如
gameViewControllerDidFinish(_:)),避免重复执行状态栏恢复逻辑。可以加个状态判断,只有状态栏确实隐藏时才执行恢复:
func gameViewControllerDidFinish(_ gameViewController: GKGameCenterViewController) { gameViewController.dismiss(animated: true) { if UIApplication.shared.isStatusBarHidden { UIApplication.shared.setStatusBarHidden(false, with: .fade) } } }
- 如果你用的是iOS 13+的
UIStatusBarManager,同样要确保isStatusBarHidden属性只被修改一次,不要在多个生命周期方法或回调里重复设置。 - 若依赖OpenGC库处理Game Center,建议检查库的源码是否存在重复处理状态栏的逻辑,必要时可以更新库版本或修改相关代码。
2. 理解 Extension request cancelled with error: Error Domain=NSExtensionErrorDomain Code=-2 错误
这个错误本质上是系统正常提示——当你关闭Game Center界面时,App作为宿主终止了和Game Center扩展的连接,系统就会抛出这个日志。大多数情况下它不会影响App功能,属于无害的提示信息。
如果想消除这个日志,可以尝试:
- 在
gameViewControllerDidFinish回调里,确保正确dismiss控制器,并且不要立即发起新的Game Center请求,给系统一点时间结束扩展会话:
func gameViewControllerDidFinish(_ gameViewController: GKGameCenterViewController) { gameViewController.dismiss(animated: true) { // 延迟1-2秒再执行后续的Game Center操作(如果有的话) DispatchQueue.main.asyncAfter(deadline: .now() + 1) { // 比如刷新排行榜数据等操作 } } }
- 检查是否有手动取消未完成的Game Center扩展请求的逻辑,如果有,确保取消时机合理,避免在扩展请求进行中强制关闭界面。
额外建议
如果你的App功能完全正常,第二个错误其实可以不用特意处理,它只是系统的一个提示信息。重点解决第一个状态栏重复恢复的问题,就能消除对应的警告日志。
内容的提问来源于stack exchange,提问作者RS2307
相关产品推荐
相关产品推荐

