2

我正在尝试实现一个针对 iOS 6 的游戏中心感知应用程序。为了提供有关环境的一些信息,我正在使用 XCode 版本为 4.5.2 的 mac os 10.7.5 并且 xcode 正在运行 iphone 和 ipad 模拟器版本 6.0。问题是我无法通过 ipad 或 iphone 模拟器以沙盒模式连接到游戏中心,但是在我的 iphone 中测试时,相同的代码可以正常工作。

我遵循了苹果开发者库中的游戏中心编程指南,我得到了这个 atm,它是从 appdelegate 中的 applicationDidFInishLaunching 调用的:

- (void)authenticateLocalUser:(UIViewController *)currentViewController
{

    if (!gameCenterAvailable) return;
    GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];

    localPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error){

        if (viewController != nil)
        {
            [currentViewController presentViewController:viewController animated:YES completion:nil];

        }
        else if (localPlayer.isAuthenticated)
        {
            NSLog(@"Player authenticated");
        }
        else
        {
            NSLog(@"Player not authenticated");
        }
        NSLog(@"Error: %@",error);
    };
}

它输出:

Error: Error Domain=GKErrorDomain Code=2 "The requested operation has been cancelled."
UserInfo=0x8690510 {NSLocalizedDescription=The requested operation has been cancelled.}

GKSConnSettings: set server: {
        "gk-cdx" = "17.173.254.218:4398";
        "gk-commnat-cohort" = "17.173.254.220:16386";
        "gk-commnat-main0" = "17.173.254.219:16384";
        "gk-commnat-main1" = "17.173.254.219:16385";
    }

虽然我的操作系统不是 10.8.2,但我已经尝试过修复主机文件,但它没有帮助。https://devforums.apple.com/thread/168811?tstart=0

知道可能是什么原因吗?

编辑:好吧,事实证明以 GKSConnSettings 开头的输出部分没有表示任何问题,这是连接到游戏中心时的常规输出,正如我从互联网上阅读的内容所了解的那样。我在身份验证块内打印了实际的错误消息(GKErrorDomain = 2 ...)。

4

2 回答 2

1

我的灵感来自:https ://stackoverflow.com/a/8115807/837244 ,并决定使用不同的代码登录游戏中心帐户。所以在 viewdidload 我通常调用:

[[GCHelper sharedInstance] authenticateLocalUser:self];

现在我将其注释掉,通过以下 URL 方案访问游戏中心,登录到我的帐户,然后注销。

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"gamecenter:"]];

最后通过注释掉 URL 代码并使用原始代码来恢复。现在它工作正常,我想问题是游戏中心帐户已经连接到模拟器中,并且它拒绝了每个登录请求。希望苹果能更清楚地显示错误消息,解决这样一个简单的问题需要一个月的时间,这可能对其他人有所帮助。

于 2013-01-27T06:30:37.260 回答
0

我知道这个问题引用了特定的 Xcode 和 iOS 模拟版本,但是如果您的模拟器已经登录了一个帐户,并且您不介意丢失模拟器上的任何数据(可能性很小,但您永远不知道),您可以简单地重置其上的设置和数据。

转到:模拟器 -> 重置内容和设置...

...并在出现提示时确认操作。

这对于运行 iOS 9.x 模拟器的 Xcode7.x 来说当然是正确的,其他人可能能够验证它是否适用于早期版本(尤其是当我发现了一个相当古老的问题和答案时)。

动物451

死灵术:+1

于 2016-08-22T06:55:14.730 回答