数週間前、私は iOS 5 で動作する TurnBased の 2 プレーヤー ゲームを作成しました。
このゲームでは、プレーヤーが独自のインターフェイスからフレンドから対戦相手を選択できるようにし、マッチ メイキング ビューを表示するときに GKMatchRequest のplayersToInvite プロパティを使用して、自動的に対戦相手を招待できるようにします。
iOS6 より前では「何もしない」と書かれているドキュメントとは対照的に、iOS5 での実行時に GKTurnBasedMatchmakerViewController が選択したプレイヤーを自動的に選択し、招待を開始する効果があります。
リクエストが返ってきたら、次の場所で:
- (void)turnBasedMatchmakerViewController:(GKTurnBasedMatchmakerViewController *)viewController didFindMatch:(GKTurnBasedMatch *)match
このアプリはすぐにターンを実行し、次のプレーヤーに渡します。これにより、実際の招待が相手のターンに合わせて発生し、そこからゲームがうまく進みます。
上記のデリゲート呼び出しの match.participants には両方とも有効な playerID プロパティが含まれているため、「nextParticipant」呼び出しが可能かつ有効になります。
これまでのところ、iOS 5 で問題なく動作しています。
ただし、iOS 6 で実行している場合は、
- (void)turnBasedMatchmakerViewController:(GKTurnBasedMatchmakerViewController *)viewController didFindMatch:(GKTurnBasedMatch *)match
そして、2 番目の参加者の playerID が nil であることを発見し、それを次の参加者として設定しようとすると、「不明な操作」で失敗します。
さらに調査すると、通常どおりマッチ リクエストを開始した後、GC UI で招待をキャンセルし、GC UI を介して再度招待すると、すべて期待どおりに機能します。招待が失敗するのは、playersToInvite を自分で設定した場合のみです。iOS6 の誤った nil を除いて、すべてのケースで playerID が正しいことを確認しました。
iOS5 で実行すると、これはすべて正しく動作することに注意してください。
Apple は iOS5 で動作させ、動作しないと主張し、iOS6 でそれを壊して動作すると主張したようです :)