に奇妙な問題がありGameKit
ます。他の人が同じ問題を経験しているかどうかを知りたいです。バグですか?
ゲーム キットを使用して基本的なターン ベースのゲームを実装しました。プレイヤーが別のプレイヤーを招待
+ (void)findMatchForRequest:(GKMatchRequest *)request withCompletionHandler:(void (^)(GKTurnBasedMatch *match, NSError *error))completionHandler
そしてターン終了
- (void)endTurnWithNextParticipants:(NSArray *)nextParticipants turnTimeout:(NSTimeInterval)timeout matchData:(NSData *)matchData completionHandler:(void (^)(NSError *error))completionHandler
2 番目のプレーヤーが受け入れ、ゲームが開始されます。2 番目のプレーヤーが自分のターンをプレイした後、そのプレーヤーはターンを終了します。
- (void)endTurnWithNextParticipants:(NSArray *)nextParticipants turnTimeout:(NSTimeInterval)timeout matchData:(NSData *)matchData completionHandler:(void (^)(NSError *error))completionHandler
等々...
プレーヤーは、カスタム メッセージでも通知を受信します。すべて正常に機能します。
アプリ(他のプレイヤー)がバックグラウンドにあり、通知バナーをタップしてアプリを起動した場合にも機能します。
アプリがデバイスでバックグラウンドで実行され、他のデバイスがターンを終了すると、問題が発生します。最初のデバイスはターンに関する通知を受け取りますが、アプリを起動して (通知バナーをタップするのではなく、手動で) 試合をロードすると、古い試合データが取得されます。
+ (void)loadMatchesWithCompletionHandler:(void (^)(NSArray *matches, NSError *error))completionHandler
アプリにゲーム データを保持せず、一時的なオブジェクトのみを保持します。両方のデバイスでアプリを閉じて、もう一度マッチをロードしようとしました。ゲームセンターのサーバーから異なる対戦データを取得します。そのうちの 1 つは古いデータを取得し、もう 1 つはターンを終了して更新された試合データを取得します。
次の方法で同じことを試しましたが、動作しますが、ターンを終了できません。
- (void)saveCurrentTurnWithMatchData:(NSData *)matchData completionHandler:(void (^)(NSError *error))completionHandler
テスト中は、シミュレーターは使用せず、デバイスのみを使用します。SDK 6.1、iOS 6.0.1、そしてもちろんサンドボックス。