我对endMatchInTurnWithMatchData的调用导致与服务中断错误的连接。什么寻找诊断这个问题的提示? Xcode 7.3.1,部署目标9.3
-(void)sendGameOver {
GKTurnBasedMatch *currentMatch = [[GameKitHelper sharedGameKitHelper] currentMatch];
// set the game outcome property for the current participant
GKTurnBasedMatchOutcome otherOutcome;
if (self.youAre == game.winningPlayer) {
[currentMatch.currentParticipant setMatchOutcome:GKTurnBasedMatchOutcomeWon];
otherOutcome = GKTurnBasedMatchOutcomeLost;
} else {
[currentMatch.currentParticipant setMatchOutcome:GKTurnBasedMatchOutcomeLost];
otherOutcome = GKTurnBasedMatchOutcomeWon;
}
// all other (only one other) participants get opposite outcome
for (GKTurnBasedParticipant *nextParticipant in currentMatch.participants) {
if (![nextParticipant isEqual:currentMatch.currentParticipant]) {
[nextParticipant setMatchOutcome:otherOutcome];
}
}
// prepare match data
NSDictionary *turn = [NSDictionary dictionaryWithObjects:@[game]
forKeys:@[gameKey]];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:turn];
NSArray *achievements = [self achievementsToReport:currentMatch];
NSArray *scores = [self scoresToReport:currentMatch];
[currentMatch endMatchInTurnWithMatchData:data scores:scores achievements:achievements completionHandler:^(NSError * _Nullable error) {
if (error) {
NSLog(@"%@", error);
[self setGamePopUpMessage:@"Oops, there was a problem. Try that again."];
}
}];
}
答案 0 :(得分:0)
不知何故,这个问题似乎在成就的报道中。如果我为成就发送一个空数组,则错误消失。但是一旦我尝试使用endMatch传递成就信息,错误就会恢复。
所以我继续收到错误"连接到名为com.apple.gamed的服务被中断"如果我使用
endMatchInTurnWithMatchData: scores: achievements: completionHandler:
但是,如果我使用(作为解决方法)
endMatchInTurnWithMatchData: completionHandler:
紧接着是:
GKAchievement reportAchievements: withCompletionHandler:
然后一切似乎都正常。
答案 1 :(得分:0)
最初的问题是我在自己创建了一系列成就,在所有情况下都使用GKAchievement initWithIdentifire,即使是之前比赛中已经为玩家报告的成就。正确的方法是首先调用loadAchievementsWithCompletionHandler来获取播放器已知的所有成就,然后更新相关的成就。如果需要,可以向该阵列添加新的GKAchievement。但关键是要正确初始化数组。一旦我修复了所有这些,我就能够使用endMatchInTurnWithMatchData正确发送成就数组:得分:成就:completionHandler:并且不再接收我的原始错误“名为com.apple.gamed的连接服务被中断”。
...无论其
我的游戏是一个双人游戏,有人可能被迫转弯(或意外转弯),导致他们立即失败。在那种情况下,我希望增加对手(刚刚获胜)的成就。然而,看起来你不能增加对手的成就,因为你无法知道他们之前的成就水平。
我的解决方案,这是不理想的,是在轮到他们输掉游戏的玩家报告他们可能获得的任何成就(目前不是任何成就,但你永远不会知道......)。获胜的玩家将在收到“matchEnded”消息时报告他们的成就。不幸的是,这意味着如果他们从未打开游戏,他们就不会增加他们的成就。不理想。