首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么时候GKMatchRequest会是“无效的”?

什么时候GKMatchRequest会是“无效的”?
EN

Stack Overflow用户
提问于 2014-12-05 03:08:20
回答 3查看 590关注 0票数 2

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

文档只说:

GKErrorMatchRequestInvalid

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

我认为GKErrorMatchRequestInvalid永远不会在第一次尝试时出现,也就是说,直接从Xcode启动后,而只发生在第二次/第三次/...试一试。在设备或模拟器上发生。因此,我假设我做错了什么,但又是什么呢?GKMatchRequest是否有一份 exhaustive list of is invalid?

尝试通过调用GKErrorMatchRequestInvalidfindMatchForRequest:中恢复,但从未成功:一旦我得到一个'invalid' match**,,那么所有后续的** findMatchForRequest: findMatchForRequest:调用也会返回一个'invalid' match.试图通过同时使用[[GKMatchmaker sharedMatchmaker] cancel][[GKMatchmaker sharedMatchmaker] finishMatchmakingForMatch:来解决此问题...显然,我甚至没有有效的finishMatchmakingFor: match

匹配发生在单例中(如果这很重要)。相关代码如下:

代码语言:javascript
复制
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
     }
 }];
EN

回答 3

Stack Overflow用户

发布于 2014-12-05 06:16:08

我得到了同样的东西。做了同样的测试。这似乎是真的,“请求不能被提交”和请求内容无关的都是无效/不正确的。

可疑原因:

  • a authentication request (可能没有发生身份验证问题) MatchMaker MatchMakera request(最后一个请求)仍然处于活动状态。( GameCenter是否在等待匹配时重新启动?)我找不到查询matchmaker以查看请求是否处于活动状态的方法。
    • MayBe MatchMaker CANCEL遇到了一些计时漏洞,并且未处于软管状态,在这种状态下,请求无法提交给(或被) MatchMaker (最有可能)

    接受

票数 1
EN

Stack Overflow用户

发布于 2019-05-21 05:06:58

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

在设置了minPlayers=2之后,一切都运行正常。希望这能有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2016-05-16 10:16:40

我遇到了同样的问题,并通过调用[[GKMatchmaker sharedMatchmaker] cancel];解决了这个问题。

这会在- (void)findMatchForRequest:(GKMatchRequest *)request withCompletionHandler:(void(^__nullable)(GKMatch * __nullable match, NSError * __nullable error))completionHandler;完成处理程序中触发错误。

代码语言:javascript
复制
NSLocalizedDescription = "The requested operation has been canceled or disabled by the user.";

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27302013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档