2014-12-04 3 views
2

경우에 따라 findMatchForRequest:withCompletionHandler:이 13 또는 GKErrorMatchRequestInvalid : : "일치 요청이 유효하지 않아 요청한 작업을 완료 할 수 없습니다."오류가 반환되는 경우가 종종 있습니다.언제 GKMatchRequest가 '유효하지 않음'입니까?

문서는 말한다 :

이 경기 요청의 속성을 이행 할 불가능

을 GKErrorMatchRequestInvalid. 예를 들어 최소 플레이어 수는 이며 최대 플레이어 수보다 클 수 없습니다. iOS 4.0 이상에서 사용할 수 있습니다.

나는 결코 시도에서 발생GKErrorMatchRequestInvalid 생각 , 즉, 직접 엑스 코드에서 실행 한 후, 만 2/3 일/... 시도. 장치 또는 시뮬레이터에서 발생합니다. 그래서 저는 일을 잘못하고 있다고 가정합니다. 철저한 목록에 GKMatchRequest이 유효하지 않은 조건 목록이 있습니까?

findMatchForRequest:을 불러 GKErrorMatchRequestInvalid 복구하지만, 성공 결코 시도 : 나는 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 
    } 
}]; 

답변

1

정확하게 똑같습니다. 그리고 같은 테스트를했습니다. 이것은 실제로 "요청을 제출할 수 없습니다."요청한 내용과 관련이 없으며 잘못되었거나 잘못되었습니다.

의심되는 이유 :

  • 인증 문제 (아마도하지 않았다 재 인증)

  • 아마 중매는 요청 (마지막 요청)이 아직 활성 생각한다. (GameCenter가 일치하는 것을 기다리는 동안 재시작 되었습니까?) 중매자가 쿼리가 활성화되어 있는지 확인하는 방법을 찾지 못했습니다.

  • MayBe MatchMaker CANCEL이 타이밍 구멍을 치고 받아 들여지지 않았거나 완료되지 않았습니다.

  • 은 어쩌면 요청 (또는 수용)에 제출 될 수없는 최대 묶였던 상태, 중매 (대부분)

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."; 

희망이 있습니다.