Я довольно давно использую GKMatch в приложении. Я преследовал и выпускал игру, периодически останавливаясь и отследив ее до отправки пакетов, но не полученных. Это происходит только изредка, но я не могу понять, почему это происходит.Игровой центр GKMatch GKSendDataReliable потерянный пакет
Все сообщения отправляются с использованием 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 никогда не попадает ...!
Кто-нибудь когда-либо видел это? Есть ли у кого-нибудь идеи, что это может быть? Я не знаю, что еще я мог сделать, чтобы отладить это.
Мои пользователи также жалуются, что некоторые данные могут быть случайно потеряны во время игры. Но я все еще не могу воспроизвести эту ошибку самостоятельно. У вас есть пример проекта, где эта ошибка постоянно воспроизводится? Если да, не могли бы вы поделиться им (может быть, на github)? Благодарю. – Yan
Мой проект очень большой (активное приложение в магазине в настоящее время), но я попытаюсь собрать меньшую его версию, чтобы убедиться, что она постоянно воспроизводима. –
У меня такая же проблема, особенно когда подключение к Интернету на одном из устройств слабое. Правда ли, что GKSendDataReliable перестает отправлять сообщения, пока не получит подтверждение? – jyek