在 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模拟器调试Unity项目?

iOS/Xcode:如何模拟两个 iOS 模拟器之间的网络连接

Socket.io 适用于桌面 safari 和 chrome,但不适用于移动设备

iOS9:在模拟器和设备上使用动态框架

ios模拟器和设备中的内存使用

强制 iOS 将文件上传到 iCloud