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];
    }
    };

}

しかし、問題は、、、、enableGameCenterForPlayerdisableGameCenterが実装されたメソッドではなく、次のように返されることです。pauseGamepresentLoginVC

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 に答える