2

偶尔但并非很少,findMatchForRequest:withCompletionHandler:返回错误 13 或GKErrorMatchRequestInvalid:“请求的操作无法完成,因为匹配请求无效。”

文档只说:

GKErrorMatchRequest 无效

无法满足匹配请求的属性。例如,最小玩家数不能大于最大玩家数。在 iOS 4.0 及更高版本中可用。

认为GKErrorMatchRequestInvalid永远不会发生在第一次尝试,即直接从 Xcode 启动后,但仅在第 2/3/... 次尝试时发生。发生在设备或模拟器上。所以我假设我做错了什么,但是什么?是否有详尽GKMatchRequest的无效条件清单?

试图GKErrorMatchRequestInvalid通过调用来恢复findMatchForRequest:,但从未成功:一旦我得到一个 'invalid' match,那么所有进一步findMatchForRequest:的调用也会返回一个 'invalid'match。试图通过同时使用[[GKMatchmaker sharedMatchmaker] cancel]和来解决这个问题[[GKMatchmaker sharedMatchmaker] finishMatchmakingForMatch:......显然,我什至没有有效match的 to finishMatchmakingFor:

配对发生在单例中(如果重要的话)。以下是相关代码:

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 以查看请求是否处于活动状态的方法。

  • MayBe MatchMaker CANCEL 遇到了一些时间漏洞,没有被接受/完成。

  • 可能是一种状态不佳,无法将请求提交给(或被)MatchMaker 接受(很可能)

于 2014-12-04T22:16:07.627 回答
1

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

设置后minPlayers=2一切正常。希望这可以帮助。

于 2019-05-20T21:06:58.270 回答
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 回答