Я давно использую 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 должно отправлять сообщения, а затем не будет отправлять другой, пока не получит подтверждение. Сообщения не принимаются, но новые сообщения отправляются с одного и того же устройства.
Метод отправки возвращает "YES", а ошибка равна нулю, но didReceiveData никогда не попадает...!
Кто-нибудь когда-нибудь видел это? Есть ли у кого-нибудь идеи, что это может быть? Я не знаю, что еще я мог сделать, чтобы отладить это.