3

[GKMatchmaker sharedMatchmaker].inviteHandler は iOS 7 で非推奨になりましたが、GameKit ガイドではまだそのように設定するように言われています。iOS 7 のリアルタイム ゲームへの招待に何を使用することになっているのか知っている人はいますか? いくつかのリスナー クラスの新しいクラス/メソッドがありますが、私が見たものに具体的に対処するものはありません。

'inviteHandler' is deprecated: first deprecated in iOS 7.0
4

3 に答える 3

4

そのため、私はこれに本当にイライラし始めていました (ほぼ魔法のように、昨日、コンソールに非推奨の警告が表示され始めました)。Apple は、新しい GKLocalPlayerListener プロトコルを実装するものとしてオブジェクトを設定する方法を詳しく説明していないようです。

これが私がやった方法です。ローカル プレーヤーを認証した直後に、GKLocalPlayerListener プロトコルを実装するオブジェクト (この場合は自分自身) をリスナーとして登録しました。アプリが同じ Game Center イベントにどのように応答するかをテストしたところ、それに応じて応答しました。これが適切な方法だと思いますが、リスナーを登録するのに最適な場所はまだ疑問に思っています。プレイヤーが認証された後にそれを行うのは理にかなっていると思いますが、それよりも微妙かもしれません。

NSLog(@"Authenticating local user...");
__weak GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];

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

    [self setLastError:error];

    if (localPlayer.isAuthenticated) {

        [localPlayer registerListener:self];

    } else if(viewController) {

        [self presentViewController:viewController];
    } else {


    }
};

また、リスナーを複数回登録することも避けたいと考えています。ローカル通知のオブザーバーを登録するようなものです。複数回実行すると、リスナー メソッドが複数回呼び出されることになります。

私は次の方法を信じています:

-(void)handleInviteFromGameCenter:(NSArray *)playersToInvite;

次のとおりです。

-(void)player:(GKPlayer *)player didRequestMatchWithPlayers:(NSArray *)playerIDsToInvite;

ドキュメントを読むと、これが呼び出されたときに GKMatchMakerViewController (またはもう少し特注の同様のもの) を作成することが言及されています。以前のバージョンのアプリでそれを行っていたことを知っているので、そう遠くないはずです。メソッドの構造も非常に似ています。

これが実際に新しいプロトコルにアプローチする正しい方法であるかどうかは、さらなるテストで確認されますが、これまでのところ正しいようです. 別の指示があるまで、これを続けます。

于 2013-10-06T22:27:11.207 に答える
1

意図した代替はGKInviteEventListenerプロトコルのようです。GKLocalPlayer.h でそれへの参照を確認できます。GKLocalPlayerListenerプロトコルはそれを拡張します。

ただし、このプロトコルに関するドキュメントは限られています (Xcode 5 のドキュメント ウィンドウで検索できますが、Web 上には表示されません)。

ドキュメントが不足していることを考えると、現時点では非推奨の方法を引き続き使用するのがおそらく最も安全です。いずれにせよ、iOS6 では引き続き使用する必要があります。

于 2013-09-19T20:59:26.483 に答える