Сколько данных в байтах я могу отправить одновременно через Bluetooth?
Я использую классы GKPeerPickerController и GKSession и пытаюсь отправить довольно большой объем данных (около 20 МБ, изображения). Проблема в том, что когда я отправляю больше, скажем, 10 мегабайт, соответствующий метод делегата получателя (- (void) receiveData:(NSData *)data fromPeer:(NSString *)peer inSession: (GKSession *)session context:(void *)context;
) просто не звонят. Есть ли ограничения по размеру? Нет обработчиков завершения или возвращены ошибки. Данные отправляются в никуда... У меня есть еще один вопрос - можно ли уведомить отправителя, что данные получены? (Так что я могу отправлять пакеты в очереди). Заранее спасибо!
Добавлено Этот метод формирует словарь с объектами, которые я хочу отправить
- (void)sendQuiz:(id<BlitzModelQuizProtocol>)quiz {
if ([quiz.backgroundType intValue] == BackgroundTypeUser) {
NSMutableDictionary * background = [NSMutableDictionary new];
NSString * filePath = [[BUIFileManager sharedInstance] filePathWithFileName:quiz.backgroundPath];
NSData * imageData = [NSData dataWithContentsOfFile:filePath];
[background setObject:imageData forKey:kQuizBackgroundImage];
[background setObject:quiz.backgroundPath forKey:kQuizBackgroundName];
[self.objectsToSend setObject:background forKey:kQuizBackground];
}
for (id<BlitzModelQuestionProtocol>question in quiz.questions) {
// Improve this logic when answers become > 1
if ([question.smileyType intValue] == SmileyTypeCustom) {
NSMutableArray * customSmiles = [NSMutableArray new];
for (id<BlitzModelAnswerProtocol>answer in question.answers) {
NSLog(@"smiley is: %@", answer.smiley);
NSMutableDictionary * smiles = [NSMutableDictionary new];
NSString * filePath = [[BUIFileManager sharedInstance] filePathWithFileName:answer.smiley];
NSData * imageData = [NSData dataWithContentsOfFile:filePath];
[smiles setObject:answer.smiley forKey:kSmileName];
[smiles setObject:imageData forKey:kSmileImage];
[customSmiles addObject:smiles];
}
[self.objectsToSend setObject:customSmiles forKey:kCustomSmiles];
}
}
NSArray * statistics = [self statisticsForQuizId:quiz.objectId];
if ([statistics count] > 0) {
NSMutableArray * blitzStatistics = [NSMutableArray new];
for (id<BlitzModelStatisticProtocol>stat in statistics) {
BlitzStatistic * statistic = [[BlitzStatistic alloc] initWithObject:stat];
[blitzStatistics addObject:statistic];
}
[self.objectsToSend setObject:blitzStatistics forKey:kStatiscticObjects];
}
else {
BlitzQuiz * quizModelObject = [[BlitzQuiz alloc] initWithObject:quiz];
[self.objectsToSend setObject:quizModelObject forKey:kQuizObject];
}
NSData * data = [NSKeyedArchiver archivedDataWithRootObject:self.objectsToSend];
[self sendDataToPeers:data];
}
Это мое sendData
метод:
- (void) sendDataToPeers:(NSData *) data {
NSString * title;
if (self.currentSession) {
NSError * error = nil;
if ([self.currentSession sendDataToAllPeers:data
withDataMode:GKSendDataReliable
error:&error]) {
NSLog(@"quiz sent");
}
else {
NSLog(@"error desc is: %@", [error localizedDescription]);
}
}
}
Метод - (BOOL)sendDataToAllPeers:(NSData *)data withDataMode:(GKSendDataMode)mode error:(NSError **)error
возвращается YES
без ошибок (это ноль). Что я делаю неправильно?
добавленной
Иногда данные принимаются успешно, хотя sendData по-прежнему возвращает NO без каких-либо ошибок. Ни один из методов делегата, которые обрабатывают ошибку, не вызывается.