GameCenter:endTurnWithNextParticipants 没有前进

GameCenter: endTurnWithNextParticipants not advancing

在沙盒环境中,我无法将回合制比赛推进到下一位玩家。

初始条件:

在我的 "end turn" 函数中,我执行以下操作:

    NSLog(@"size = %ld", updatedMatchData.length);

    //move the current player to the bottom of the list
    NSMutableArray *nextPlayers = (NSMutableArray *)theMatch.participants;
    NSLog(@"%@", [nextPlayers description]);

    GKTurnBasedParticipant *firstGuy = nextPlayers[0];
    [nextPlayers removeObjectAtIndex:0];
    [nextPlayers addObject:firstGuy];

    NSLog(@"------");
    NSLog(@"%@", [nextPlayers description]);

    //send the match to the servers
    //"theMatch" was recorded in turnBasedMatchmakerViewController:didFindMatch

    [theMatch endTurnWithNextParticipants:nextPlayers
                              turnTimeout:GKTurnTimeoutDefault
                                matchData:updatedMatchData
                        completionHandler:^(NSError *error)
    {
        if (error)
        {
            NSLog(@"WTF?");
        }
    }];

产生以下日志输出:

size = 26926
(
"<GKTurnBasedParticipant 0x174018630 - playerID:G:1084583147 (local player) status:Active matchOutcome:None lastTurnDate:(null) timeoutDate:(null)>",
"<GKTurnBasedParticipant 0x174018ba0 - playerID:G:12962188 status:Invited matchOutcome:None lastTurnDate:(null) timeoutDate:(null)>"
)
------
(
"<GKTurnBasedParticipant 0x174018ba0 - playerID:G:12962188 status:Invited matchOutcome:None lastTurnDate:(null) timeoutDate:(null)>",
"<GKTurnBasedParticipant 0x174018630 - playerID:G:1084583147 (local player) status:Active matchOutcome:None lastTurnDate:(null) timeoutDate:(null)>"
)

但是,玩家 B 没有收到邀请或转牌。玩家 B 的游戏中心应用程序显示没有活动游戏或回合。玩家 A 的游戏中心继续显示他仍然 有一个待处理的回合。每次我重新启动并重新执行测试时,玩家 A 都会累积另一个待处理的回合。

玩家 A 在我结束回合后立即开火 player:receivedTurnEventForMatch:didBecomeActive,但 didBecomeActive 设置为 NO。

于是我把超时改成了30秒。 playerA 结束回合后 30 秒,playerA 触发 didBecomeActive(否)。 PlayerB 最终收到邀请提示。玩家 B 触发 didBecomeActive,值为 YES。

为什么我的回合没有在玩家 A 结束回合后立即进入玩家 B?为什么玩家 A 似乎有另一个回合(然后超时并传递给玩家 B)?

终于解决了这个问题。不要尝试编辑匹配对象。不要直接编辑匹配数据或匹配的任何其他组件。创建一个副本,对副本做任何你需要做的事情,然后重新提交副本。

我对玩家进行排序的尝试产生了各种不稳定的结果,直到我创建了一个完全独立的参与者数组并对其进行了排序。然后它像宣传的那样工作。