そのため、私はこれに本当にイライラし始めていました (ほぼ魔法のように、昨日、コンソールに非推奨の警告が表示され始めました)。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 (またはもう少し特注の同様のもの) を作成することが言及されています。以前のバージョンのアプリでそれを行っていたことを知っているので、そう遠くないはずです。メソッドの構造も非常に似ています。
これが実際に新しいプロトコルにアプローチする正しい方法であるかどうかは、さらなるテストで確認されますが、これまでのところ正しいようです. 別の指示があるまで、これを続けます。