0

我在使用 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];
    }
    };

}

但问题是 , enableGameCenterForPlayer, pauseGame, presentLoginVCdisableGameCenter 不是实现的方法,它返回:

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

我该如何解决这个问题?

谢谢

4

1 回答 1

1

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

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

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

下面是我的 UITabBarController 'category' .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() 或其他内容。

于 2013-01-30T19:29:50.250 回答