偶尔但并非很少,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
}
}];