findMatchForRequest:withCompletionHandler:
偶尔会返回错误13或GKErrorMatchRequestInvalid
,但不是很少见:
“由于匹配请求无效,无法完成请求的操作。”
文档只说:
GKErrorMatchRequestInvalid
匹配请求的属性是 无法实现。例如,最小玩家数量 不能大于玩家的最大数量。适用于iOS 4.0及更高版本。
我认为 1 尝试GKErrorMatchRequestInvalid
永远不会发生,也就是说,直接从Xcode启动后,但仅限于第2 /第3 / ..尝试发生在设备或模拟器上。所以我认为我我做错了什么,但是什么? GKMatchRequest
无效的详尽条件列表是什么?
尝试通过回忆GKErrorMatchRequestInvalid
从findMatchForRequest:
恢复,但从未成功:一旦我收到'无效'match
,那么所有进一步的findMatchForRequest:
电话也会返回“无效”match
。试图通过同时使用[[GKMatchmaker sharedMatchmaker] cancel]
和[[GKMatchmaker sharedMatchmaker] finishMatchmakingForMatch:
来解决这个问题......显然,我甚至没有有效的match
到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
}
}];
答案 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
后,一切正常。希望这会有所帮助。