有人遇到过这个问题吗?
解决方法 使用GameKit一段时间后我发现每个’发送’的限制大约为90k,所以如果你的文件大于90k你将不得不将其分解.以下是我建议你解决问题的方法:1st – 发送文件名
NSData* filenameData = [filenameStr dataUsingEnCoding: NSASCIIStringEnCoding];// send 'filenameData'
第二 – 发送您要发送的块数
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'
3rd – 分解并将你的NSData对象发送到一组每个小于50k的NSObjects(只是为了安全大小)
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' }
在接收方,您需要执行以下 *** 作:
1st – 接收文件名
// Receive dataNsstring* filenameStr = [[Nsstring alloc] initWithData:receivedData enCoding:NSASCIIStringEnCoding]
第二 – 接收您即将收到的块数
// Receive dataNsstring* 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对象和一个包含文件内容的数据对象.
希望这会有所帮助 – AYAL
总结以上是内存溢出为你收集整理的iphone – GameKit蓝牙传输问题全部内容,希望文章能够帮你解决iphone – GameKit蓝牙传输问题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)