奇怪的GameKit行为.其他人看到这个?

End*_*ker 7 iphone xcode objective-c ios game-center

我正在运行Xcode 4.3.3并且我的目标是iOS 5.1.我试图在游戏中包含游戏中心功能.

在对GKLocalPlayer进行身份验证时,会向用户显示登录到游戏中心的警报视图或显示已登录.到目前为止,这一切都很好,但如果用户按下" 创建新帐户"按钮,则任何打开的模态视图都会移动到根视图控制器和以下错误是从控制台吐出:

对<GKModalRootViewController:内存地址 >的开始/结束外观转换的不平衡调用.

我已经尝试在应用程序委托和根视图控制器之间移动GKLocalPlayer身份验证代码.我还尝试在一个新的空白项目中实现身份验证.我有没有使用Storyboard和ARC尝试过它.在所有这些情况下,结果都是相同的:隐藏在根视图控制器后面的模态和给出的错误.

这是我从app delegate的应用程序调用的GKLocalPlayer身份验证方法:didFinishLaunchingWithOptions: method:

- (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.
        }
    }];
}
Run Code Online (Sandbox Code Playgroud)

是它的截图.在此图片中,根视图控制器具有50%alpha值的背景.这个bug已经将模态推到了根视图控制器后面.

这个stackoverflow问题包含我可以找到的这个错误的唯一引用(关于GKModalRootViewController),它不适合,因为(a.)我没有使用cocos2d.(b.)无论我是否执行segue,我都不会触及viewWillAppear:或viewDidAppear :. (c.)没有给出可接受的答案.

这个问题这个问题似乎涉及相同的问题(视图层次结构被销毁)但没有答案,也没有提到控制台错误消息.

这会发生在其他人身上吗?关于可能导致这种情况的任何想法?

更新1:我甚至将认证代码放入连接到模态视图中的按钮的IBAction,以避免任何初始化冲突.它没有帮助.

更新2:我尝试将身份验证代码移动到GCD后台队列中.他的结果是一样的.

是测试项目(已准备好GameCenter已经输入我的应用程序的Bundle ID).

去测试:

  1. 在测试设备/模拟器上注销游戏中心(如果您已登录).
  2. 构建并运行应用程序.
  3. 按信息按钮.
  4. 验证.
  5. 登录游戏中心警报出现后,按" 创建新帐户".
  6. 取消.
  7. 控制台中是否显示"不平衡呼叫..."消息?模态视图(使用"验证"按钮)是否消失了?
  8. 按信息按钮.
  9. 模态再次显示?

Nil*_*nch 2

该错误出现在“Apple 在 6.0 中修复的错误”列表中。我知道您会喜欢一种解决方法,但是当您所依赖的 API 有问题时,这种可能性就很小了。

不过,您可以庆幸 5.x 用户正在慢慢消失。

祝您的应用好运。