マッチを使ったゲームセンターゲームを作成していGKTurnBasedMatch
ます。readonly
matchData
のプロパティGKTurnBasedMatch
がGameCenterサーバーに適切に保存されていないように見えるという問題があります。
私はこのStackOverflowの回答matchData
NSData
を使用して、Game Centerサーバーとの間で送受信されるときに、でmd5チェックサムを生成しています。
インスタンスメソッドを使用してNSData
送信すると、ゲームデータオブジェクトのチェックサムに注意します。matchData
GKTurnBasedMatch
endTurnWithNextParticipants:turnTimeout:matchData:completionHandler:
次に、対戦相手はGKTurnBasedMatch
のクラスメソッドを使用して一致を取得しloadMatchesWithCompletionHandler:
、一致が到着すると(エラーなし)、チェックサムを再度記録します。
2つのチェックサムが一致せず、再構築されたゲームに基づいて、結果のデータが明らかに同一ではありません。2つのアカウントでmatchID
、オブジェクトのプロパティGKTurnBasedMatch
が同一であることを確認しました。
次のテストも実行しました。
NSLog(@"matchID: %@ matchData checksum: %@",
match.matchID,
[Utilities md5StringFromData:match.matchData]);
// match is a valid `GKTurnBasedMatch` object.
[match endTurnWithNextParticipants: @[ opponent ] // My `GKTurnBasedParticipant` opponent
turnTimeout:600
matchData:data // This is a valid NSData object
completionHandler:^(NSError *error) {
if (nil != error) {
NSLog(@"%@", error);
} else {
NSLog(@"Successfully ended turn.");
[GKTurnBasedMatch loadMatchesWithCompletionHandler:^(NSArray *matches, NSError *error) {
if (nil != error) {
NSLog(@"Error getting matches: %@", [error localizedDescription]);
} else {
for (GKTurnBasedMatch *match in matches) {
NSLog(@"matchID: %@ matchData checksum: %@",
match.matchID,
[Utilities md5StringFromData:match.matchData]);
}
}
}];
}
}];
このサンプルでは、データでターンを終了し、すぐにGameCenterから一致を取得します。データは一致します。ただし、matchData
対戦相手のGame Centerアカウントとデバイスからにアクセスすると、それらは異なります。
誰かがこのようなものに遭遇しましたか?