GKMatchRequest什么时候会“无效”?

时间:2014-12-04 19:08:20

标签: ios8 game-center gamekit gkmatchmaker

findMatchForRequest:withCompletionHandler:偶尔会返回错误13或GKErrorMatchRequestInvalid,但不是很少见: “由于匹配请求无效,无法完成请求的操作。”

文档只说:

  

GKErrorMatchRequestInvalid

     

匹配请求的属性是   无法实现。例如,最小玩家数量   不能大于玩家的最大数量。适用于iOS   4.0及更高版本。

认为 1 尝试GKErrorMatchRequestInvalid永远不会发生,也就是说,直接从Xcode启动后,但仅限于第2 /第3 / ..尝试发生在设备或模拟器上。所以我认为我做错了什么,但是什么? GKMatchRequest无效的详尽条件列表是什么?

尝试通过回忆GKErrorMatchRequestInvalidfindMatchForRequest:恢复,但从未成功:一旦我收到'无效'match,那么所有进一步的findMatchForRequest:电话也会返回“无效”match 。试图通过同时使用[[GKMatchmaker sharedMatchmaker] cancel][[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
     }
 }];

3 个答案:

答案 0 :(得分:1)

我得到同样的东西。并运行相同的测试。这似乎是真的,“请求无法提交”与REQUEST内容无关或无效。

怀疑原因:

  • 身份验证问题(可能未重新验证)

  • 也许MatchMaker认为请求(上次请求)仍然有效。 (GameCenter在等待匹配时重启了吗?)我找不到查询匹配器的方法来查看请求是否有效。

  • MayBe MatchMaker CANCEL遇到了一些时间漏洞而未被接受/已完成。

  • 可能是一个嘶哑的状态,其中请求无法提交给(或被MatchMaker接受)(最有可能)

答案 1 :(得分: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.";

希望这有帮助。

答案 2 :(得分:0)

遇到了同样的问题,并且意识到我有minPlayers=1

设置minPlayers=2后,一切正常。希望这会有所帮助。