Работая с GameKit некоторое время, я обнаружил, что существует ограничение около 90 КБ на «отправку», поэтому, если размер файла превышает 90 КБ, вам придется его разбить.Вот как я бы посоветовал вам разобраться:
1-й - Отправьте имя вашего файла
NSData* fileNameData = [fileNameStr dataUsingEncoding: NSASCIIStringEncoding];
// send 'fileNameData'
2-й - Отправьте количество чанков, которые вы собираетесь отправить
NSUInteger fiftyK = 51200;
NSUInteger chunkCount = (((NSUInteger)(srcData.length / fiftyK)) + ((srcData.length % fiftyK) == 0 ) ? 0 : 1))
NSString chunkCountStr = [NSString stringWithFormat:@"%d",chunkCount];
NSData* chunkCountData = [chunkCountStr dataUsingEncoding: NSASCIIStringEncoding];
// send 'chunkCountData'
3-й - Разбейте и отправьте свой объект NSData в набор объектов NSO менее 50 КБ каждый (просто для того, чтобы быть в безопасном размере)
NSData *dataToSend;
NSRange range = {0, 0};
for(NSUInteger i=0;i<srcData.length;i+=fiftyK){
range = {i,fiftyK};
dataToSend = [srcData subdataWithRange:range];
//send 'dataToSend'
}
NSUInteger remainder = (srcData.length % fiftyK);
if (remainder != 0){
range = {srcData.length - remainder,remainder};
dataToSend = [srcData subdataWithRange:range];
//send 'dataToSend'
}
На принимающей стороне вы захотитевыполните следующие действия:
1-й - получите имя файла
// Receive data
NSString* fileNameStr = [[NSString alloc] initWithData:receivedData encoding:NSASCIIStringEncoding]
2-й - получите количество чанков, которые вы собираетесь получить
// Receive data
NSString* chunkCountStr = [[NSString alloc] initWithData:receivedData encoding:NSASCIIStringEncoding]
NSUInteger chunkCount = [chunkCount intValue];
3-й - получитекуски данных
NSMutableData data = [[NSMutableData alloc]init];
for (NSUInteger i=0; i<chunkCount;i++){
// Receive data
[data appendData:receivedData];
}
Если все работало правильно, теперь у вас будет объект fileNameStr
, содержащий имя вашего файла, и объект data
, содержащий содержимое вашего файла.
Hopeэто помогает - AYAL