iOS 6:游戏中心身份验证

时间:2012-11-18 17:11:06

标签: ios

我在使用iOS 6 SDK的应用程序中整合游戏中心时出现问题。 事实上,我使用Apple的示例代码,但看起来不完整:

我试过这段代码:

-(void) authenticateLocalPlayer {

GKLocalPlayer* localPlayer =
[GKLocalPlayer localPlayer];

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

    [self setLastError:error];

    if ([GKLocalPlayer localPlayer].authenticated)
    {
        // authentication successful
        [self enableGameCenterForPlayer:[GKLocalPlayer localPlayer]];
    }
    else if (loginVC)
    {
        // player not logged in yet, present the vc
        [self pauseGame];
        [self presentLoginVC:loginVC];
    }
    else
    {
        // authentication failed, provide graceful fallback
        [self disableGameCenter];
    }
    };

}

但问题是enableGameCenterForPlayerpauseGamepresentLoginVC,disableGameCenter未实现方法,并返回:

Instance method '-enableGameCenterForPlayer:' not found (return type defaults to 'id')

如何解决此问题?

由于

1 个答案:

答案 0 :(得分:1)

我使用方法[self presentLoginVC:VC]来传递我的UITabViewController或UINavigationController viewController,因为下面的块不在主线程上。

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

当你在一个街区时,你应该确保不要更改UI元素,因为你真的不知道它什么时候完成或者你将在你的应用程序中。可能有很多方法可以做到这一点,但这是我的解决方案。

下面是我的UITabBarController'类'.m文件(没有子类化的类的方法的添加)我创建了方法presentLoginVC,只需通过我的UITabBarController调用'showGameCenterViewController':

    #import "UITabBarController+GameKitAdditions.h"

    @implementation UITabBarController (GameKitAdditions)

    -(void) showGameCenterViewController: (UIViewController *)VC {
        [self presentViewController:VC animated:NO completion:nil];
    }

    -(void)dismissGameCenterViewController:(UIViewController *)VC {
        [self dismissViewControllerAnimated:YES completion:nil];
    }
    @end

至于其他功能:

    -(void) enableGameCenterForPlayer:(GKLocalPlayer *) localPlayer;
    -(void) disableGameCenter;
    -(void) pauseGame;

它们可以像将一个名为enableGameCenter的BOOL设置为YES或NO一样简单。要解决错误,您可以将这些原型添加到.h文件中,然后编写函数只是为了向NSLog()输出内容。