2013-10-10 4 views
6

Я работаю над пошаговой игрой GameCenter. A GKTurnBasedMatch создан с GKMatchRequest, с minPlayers и maxPlayers установлен в 2. Я получаю NSInvalidArgumentException при попытке покончить с игрой endMatchInTurnWithMatchData, сообщая мне, что я не установил matchOutcome для всех участников. Бревна для объекта матча прямо перед этой точки показывают, что мой матч выглядит следующим образом:Неверные/дубликаты участников GKTurnBasedMatch

<GKTurnBasedMatch 0x1c1f2af0 - matchID:c9de6e47-0e9a-4dbe-944b-d2fd4ecd3044 bundleID:com.mybundle.wd status:GKTurnBasedMatchStatusEnded message:'Game Over' creationDate:2013-10-08 01:26:12 +0000 currentParticipant:(null) participants: 
<GKTurnBasedParticipant 0x1c184820 - playerID:G:128458444 (local player) status:Done matchOutcome:Lost lastTurnDate:2013-10-10 21:54:22 +0000 timeoutDate:(null)>, 
<GKTurnBasedParticipant 0x1c1b0a80 - playerID:G:220673962 status:Done matchOutcome:Lost lastTurnDate:2013-10-10 18:26:16 +0000 timeoutDate:(null)>, 
<GKTurnBasedParticipant 0x16ef1610 - playerID:G:128458444 (local player) status:Active matchOutcome:None lastTurnDate:(null) timeoutDate:(null)>, 
<GKTurnBasedParticipant 0x16ec64f0 - playerID:(null) status:Matching matchOutcome:None lastTurnDate:(null) timeoutDate:(null)> matchData.length:871 matchDataMaximumSize:65536 exchanges:(null)> 

У меня есть более чем в 2 раза GKTurnBasedParticipants здесь, и два из них тот же игрок! Я ничего особенного в игре не делать, кроме вызова следующего каждого поворота:

[match endTurnWithNextParticipants:@[nextParticipant] turnTimeout:GKTurnTimeoutDefault matchData:data completionHandler:^(NSError *error){...}] 

Кто-нибудь есть какие-либо идеи, что здесь происходит? Это игра с двумя игроками, так как я могу попасть в перепутанный объект совпадения и как я могу это предотвратить?

+0

Я просто столкнулся с этим. Вы нашли причину/решение? – Bart

+0

Пока что - я представил его как ошибку Apple, но у меня есть низкие надежды на это. Из-за этого могут возникнуть многочисленные ошибки, которые не позволят вам отправить следующий ход. До сих пор, я думаю, единственное, что нужно сделать, это обнаружить это условие и убить матч с извинениями. –

+0

Слишком плохо. Благодарю. – Bart

ответ

0

я сделать следующее, чтобы закончить игру

 ((GKTurnBasedParticipant*)[currentMatch.participants objectAtIndex:1]).matchOutcome = GKTurnBasedMatchOutcomeWon; 
     ((GKTurnBasedParticipant*)[currentMatch.participants objectAtIndex:0]).matchOutcome = GKTurnBasedMatchOutcomeLost; 

тогда я называю

[currentMatch endMatchInTurnWithMatchData:data completionHandler:^(NSError *error) 
{ 
     if (error) 
     { 
      NSLog(@"%@", error); 
     } 
     else{ 


     } 
    }]; 
+0

Спасибо, но это не отвечает на вопрос. Я хотел бы знать, почему у 2-х игроков есть 4 или более дублирующих участника. –

0

Я отправил сообщение об ошибке с Apple, и через четыре месяца получил это по электронной почте:

Hello Kirill,

Это следующее p относительно касательно ошибки № ID 15615850.

Мы считаем, что этот вопрос был рассмотрен. Пожалуйста, проверьте с выпуском iOS 7.1 beta 4 (11D5134c) и обновите свой отчет с результатами.

Итак - да, это подтверждено как ошибка, я до сих пор не знаю об обходном пути, но как только 7.1 выйдет, мы избавимся от него.

+0

У меня такая же проблема в iOS 7.1 (в среде песочницы). Это четыре участника, когда должно быть два. Каждый правильный (дважды) отображается дважды. – Drux

+0

Подтверждено - все еще случается. Я думаю, что это как-то связано с матчами, которые начинаются как приглашение другу. Не удается найти какой-либо шаблон для этого. –

Смежные вопросы