我正在运行 Xcode 4.3.3 并且目标是 iOS 5.1。我正在尝试在游戏中包含 Game Center 功能。
当对 GKLocalPlayer 进行身份验证时,用户会看到登录游戏中心警报 View 或显示已登录。到目前为止这一切都很好,但是如果用户按下 Create New Account 按钮,然后任何打开的模态视图都被移到 Root View Controller 后面,并且从控制台吐出以下错误:
Unbalanced calls to begin/end appearance transitions for <GKModalRootViewController: memory address>.
我已经尝试在应用委托(delegate)和 Root View Controller 之间移动 GKLocalPlayer 身份验证代码。我还尝试在一个新的空白项目中实现身份验证。我已经尝试过使用和不使用 Storyboards 和 ARC。在所有这些情况下,结果都是相同的:模式隐藏在 Root View Controller 后面并给出错误。
这是我从应用委托(delegate)的application:didFinishLaunchingWithOptions:方法调用的 GKLocalPlayer 身份验证方法:
- (void)authenticateLocalPlayer
{
GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
[localPlayer authenticateWithCompletionHandler:^(NSError *error) {
if (localPlayer.isAuthenticated) {
// Perform additional tasks for the authenticated player.
} else {
// Disable Game Center features.
}
if (error) {
// Handle error.
}
}];
}
Here是它的截图。在这张图片中, Root View Controller 的背景具有 50% 的 alpha 值。此错误已将模态推到 Root View Controller 后面。
This stackoverflow question包含我能找到的对此错误的唯一引用(关于 GKModalRootViewController),它不适合因为 (a.) 我没有使用 cocos2d。 (b.) 无论我是否执行 segue 并且我没有触摸 viewWillAppear: 或 viewDidAppear:,它都会发生。 (c.) 没有给出可接受的答案。
This question和 this one似乎涉及相同的问题( View 层次结构被破坏)但没有得到答复,也没有提及控制台错误消息。
这是否发生在其他人身上?关于可能导致此问题的任何想法?
更新 1: 我什至将身份验证代码放入连接到模态视图中按钮的 IBAction 中,以避免任何初始化冲突。它没有帮助。
更新 2:我尝试将身份验证代码移动到 GCD 后台队列中。结果是一样的。
Here是测试项目(GameCenter 已准备就绪,我的应用程序的 Bundle ID 已输入)。
测试:
- 退出测试设备/模拟器上的 Game Center(如果您 已登录)。
- 构建并运行应用。
- 按信息按钮。
- 按验证。
- 当出现登录 Game Center 提示时,按 Create New 帐号。
- 按取消。
- “Unbalanced calls...”消息是否出现在控制台中?有没有 模态视图(带有身份验证按钮)消失了吗?
- 按信息按钮。
- 是否再次显示模态?
最佳答案
此错误出现在“Apple 在 6.0 中修复的错误”列表中。我知道您会喜欢一种解决方法,但是当您所依赖的 API 存在错误时,这种可能性很小。
不过,您可以为 5.x 用户正在慢慢消失而高兴。
祝您的应用程序好运。
关于iphone - 奇怪的 GameKit 行为。还有其他人看到这个吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11121693/