在 iOS 模拟器和设备之间使用 MCSession 发送文件
Posted
技术标签:
【中文标题】在 iOS 模拟器和设备之间使用 MCSession 发送文件【英文标题】:Sending file with MCSession between iOS Simulator and Device 【发布时间】:2014-07-15 11:56:11 【问题描述】:我有一个适用于 iPad 的应用程序,它需要使用对等 Apple 的 Multipeer Connectivity 库将文件从一台设备发送到另一台设备。 该文件是一个 zip 文件(我正在使用适用于 ios 的 ZipArchive:https://github.com/mattconnolly/ZipArchive),我正在使用 iOS 模拟器和一台 iPad 设备对其进行测试。 当我将文件从 iPad 发送到模拟器时,它总是可以完美运行,但是当我尝试将它从模拟器发送到设备时,它 90% 的时间都失败了。 zip 文件可以通过,但最后缺少几千字节,因此无法解压缩。 我正在使用 MCSession 类,它是用于传输的 sendResourceAtURL 函数:
// self.session is an MCSession object
[self.session sendResourceAtURL:archiveUrl withName:resourceName toPeer:clientPeer withCompletionHandler:
^(NSError *error)
if (error)
NSLog(@"File sending error: %@", error.localizedDescription);
];
我提取了 didFinishReceivingResourceWithName 委托中的文件
方法(在后台线程上运行)。
所有 NSError 变量都为零(发送和接收时),有
没有任何问题。
文件的大小并不重要,它的行为方式相同
当它是 20 KB 并且超过 1 兆字节时。
两个对等方在传输期间(或之后)永远不会断开连接。
我记录了3次发送和接收文件的文件大小:
2014-07-15 12:14:20.470 PeerTest[1139:481f] Sending file with size of 1182911
2014-07-15 12:14:22.090 PeerTest[1481:1803] Received file with size of 1171552 // failed to extract files
2014-07-15 12:16:25.470 PeerTest[1139:481f] Sending file with size of 1182911
2014-07-15 12:16:27.882 PeerTest[1481:5127] Received file with size of 1181472 // failed to extract files
2014-07-15 12:17:20.470 PeerTest[1139:481f] Sending file with size of 1182911
2014-07-15 12:17:22.980 PeerTest[1481:650f] Received file with size of 1182911 // successfully extracted files
我目前只有一台 iPad,想弄清楚为什么它只能在一个方向上工作。有什么想法吗?
【问题讨论】:
如果您尝试使用纯文本文件发送怎么办? 我刚试了一下,一个250 Kb的plist文件,同样的问题,文件末尾还缺少一些部分。 【参考方案1】:我设法通过从 iOS 7.0 升级到 7.1(也升级 XCode)解决了这个问题。现在该文件可以在 2 台 iPad 设备之间完美运行,也可以在模拟器和一台 iPad 设备之间运行。
【讨论】:
以上是关于在 iOS 模拟器和设备之间使用 MCSession 发送文件的主要内容,如果未能解决你的问题,请参考以下文章
iOS/Xcode:如何模拟两个 iOS 模拟器之间的网络连接