我正在运行Xcode 4.3.3并且我的目标是iOS 5.1。我试图在游戏中包含游戏中心功能。
在对GKLocalPlayer进行身份验证时,会向用户显示登录游戏中心警报视图或显示已登录。到目前为止,这一切都很好,但如果用户按下创建新帐户按钮,然后在根视图控制器后面移动任何打开的模态视图,并从控制台吐出以下错误:
对开始/结束外观转换的不平衡调用 < GKModalRootViewController:内存地址>。
我尝试在应用委托和根视图控制器之间移动GKLocalPlayer身份验证代码。我还尝试在一个新的空白项目中实现身份验证。我有没有使用Storyboard和ARC尝试过它。在所有这些情况下,结果都是相同的:隐藏在根视图控制器后面的模态和给出的错误。
以下是我从app delegate的应用程序调用的GKLocalPlayer身份验证方法:didFinishLaunchingWithOptions:方法:
- (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是它的截图。在此图片中,根视图控制器具有50%alpha值的背景。该错误已被推送到根视图控制器后面。
This stackoverflow question包含对此错误的唯一引用(关于GKModalRootViewController)我可以找到,但它不适合(a。)我不使用cocos2d。 (b。)无论我是否执行segue,我都不会触及viewWillAppear:或viewDidAppear :. (c。)没有给出可接受的答案。
This question和this one似乎涉及相同的问题(视图层次结构被销毁)但未得到答复,并且未提及控制台错误消息。
这是否会发生在其他人身上?关于可能导致这种情况的任何想法?
UPDATE 1:我甚至将验证码放入连接到模态视图中按钮的IBAction中,以避免任何初始化冲突。它没有帮助。
更新2:我尝试将身份验证代码移动到GCD后台队列中。他的结果是一样的。
Here是测试项目(GameCenter准备就绪,已经输入了我的应用程序的Bundle ID)。
测试:
答案 0 :(得分:2)
此错误出现在“6.0中修复的错误”列表中。我知道你会喜欢一种解决方法,但是当你依赖它的API是错误的时候,那很有可能。
然而,你可以高兴5.x用户正在慢慢消失。
祝你的应用好运。