2

まれではありませんが、まれにfindMatchForRequest:withCompletionHandler:エラー 13 またはGKErrorMatchRequestInvalid「マッチ リクエストが無効なため、リクエストされた操作を完了できませんでした」が返されることがあります。

ドキュメントには次のように書かれています:

GKErrorMatchRequestInvalid です

マッチ リクエストのプロパティを満たすことができません。たとえば、最小プレーヤー数を最大プレーヤー数より大きくすることはできません。iOS 4.0 以降で利用できます。

1回目の試行、つまりXcodeから起動した直後では決して発生しないと思いますが、2回目/3回目/...の試行でのみ発生します。デバイスまたはシミュレーターのいずれかで発生します。だから私は何か間違ったことをしていると思いますが、何ですかが無効となる条件の完全なリストはありますか?GKErrorMatchRequestInvalidGKMatchRequest

GKErrorMatchRequestInvalidをリコールして から回復しようとしましたfindMatchForRequest:が、成功しませんでした。一度 'invalid' を取得すると、それ以降の呼び出しもmatchすべてfindMatchForRequest:match'invalid' で返されます。[[GKMatchmaker sharedMatchmaker] cancel]と...の両方を使用してこれを改善しようとしていますが、有効なto[[GKMatchmaker sharedMatchmaker] finishMatchmakingForMatch:さえありません。matchfinishMatchmakingFor:

マッチメイキングはシングルトンで行われます (それが重要な場合)。関連するコードは次のとおりです。

GKMatchRequest *request = [GKMatchRequest new];
request.minPlayers = 3;
request.maxPlayers = 4;

[[GKMatchmaker sharedMatchmaker] findMatchForRequest:request withCompletionHandler:^(GKMatch *match, NSError *error)
 {
     if (error)
     {
         if (error.code == 503                          ||
             error.code == GKErrorMatchRequestInvalid   ||
             error.code == GKErrorNotAuthenticated      ||
             error.code == GKErrorCommunicationsFailure ||
             error.code == GKErrorUnknown               ||
             error.code == GKErrorInvalidPlayer         ||
             error.code == GKErrorInvalidParameter      ||
             error.code == GKErrorAuthenticationInProgress)
         {               
             [self.delegate restartMatchmaking];
         }
     }
     else if (match)
     {
        // happy-path
     }
 }];
4

3 に答える 3

1

私はまったく同じことを取得します。そして、同じテストを実行しました。これは本当のようで、「リクエストを送信できません」と REQUEST の内容に関係なく、無効/正しくありません。

疑わしい理由:

  • 認証の問題 (再認証しなかった可能性があります)

  • おそらく、MatchMaker はリクエスト (最後のリクエスト) がまだアクティブであると考えています。(マッチの待機中に GameCenter が再起動されましたか?) マッチメーカーにクエリを実行して、リクエストがアクティブかどうかを確認する方法が見つかりませんでした。

  • MatchMaker CANCEL が何らかのタイミング ホールにぶつかり、承認/完了されていない可能性があります。

  • おそらく、要求が MatchMaker に送信 (または受理) できない状態である (ほとんどの場合)。

于 2014-12-04T22:16:07.627 に答える
0

私は同じ問題を抱えていて、電話して解決しました[[GKMatchmaker sharedMatchmaker] cancel];

- (void)findMatchForRequest:(GKMatchRequest *)request withCompletionHandler:(void(^__nullable)(GKMatch * __nullable match, NSError * __nullable error))completionHandler;これにより、完了ハンドラーでエラーが発生します。

NSLocalizedDescription = "The requested operation has been canceled or disabled by the user.";

お役に立てれば。

于 2016-05-16T02:16:39.817 に答える