Я уже давно успешно использую GKMatch в приложении. Я преследовал проблему, из-за которой игра иногда останавливалась, и отследил ее до пакетов, которые отправляются, но не принимаются. Это происходит только изредка, но я не могу понять, почему это происходит.
Все сообщения отправляются с использованием GKSendDataReliable.
Регистрация показала, что пакет успешно отправляется с одного устройства, но никогда не принимается на целевом устройстве.
//Code sample of sending method....
//self.model.match is a GKMatch instance
-(BOOL) sendDataToAllPlayers:(NSData *)data error:(NSError **)error {
[self.model.debugger addToLog:@"GKManager - sending data"];
return [self.model.match sendDataToAllPlayers:data withDataMode:GKSendDataReliable error:error];
}
...
//Code sample of receiving method....
// The match received data sent from the player.
-(void)match:(GKMatch *)match didReceiveData:(NSData *)data fromPlayer:(NSString *)playerID {
[self.model.debugger addToLog:@"GKManager - received data"];
[super didReceiveData:data fromPlayer:playerID];
}
Что я вижу, так это то, что периодически (возможно, 1 из 100 сообщений) отправляется без ошибок из метода sendDataToAllPlayers, но принимающее устройство никогда не обращается к методу didReceiveData. Насколько я понимаю, использование GKSendDataReliable должно отправлять сообщения, а затем не отправлять другие, пока не получит подтверждение. Сообщения не принимаются, но новые сообщения отправляются с того же устройства.
Метод отправки возвращает «ДА», и ошибка равна нулю, но didReceiveData никогда не попадает...!
Кто-нибудь когда-нибудь видел это? У кого-нибудь есть идеи, что это может быть? Я не знаю, что еще я мог бы сделать, чтобы отладить это.