You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:42:39