WatchConnectivity文件传输无法正常工作

msk*_*msk 1 ios watchos-2

我正在使用WatchConnectivity将图像从iOS传输到Watch OS.在模拟器中调试时我遇到了问题

正如我所见(发送方即iOS),文件传输成功

public func session(session: WCSession, didFinishFileTransfer fileTransfer: WCSessionFileTransfer, error: NSError?)
Run Code Online (Sandbox Code Playgroud)

现在从XCode我停止iOS模拟器,将目标更改为Watch App,Ctrl + Run Watch App(刚运行,无构建).调用以下方法.

public func session(session: WCSession, didReceiveFile file: WCSessionFile) 
Run Code Online (Sandbox Code Playgroud)

我终于做到了

NSFileManager.defaultManager().moveItemAtURL(file.fileURL, toURL: destinationFileURL)
Run Code Online (Sandbox Code Playgroud)

此调用抛出因为file.fileURL上没有文件(我也在我的MAC中检查过).

file.fileURL.path!是这样的

/Users/<user name>/Library/Developer/CoreSimulator/Devices/DAD8E150-BAA7-43E0-BBDD-58FB0AA74E80/data/Containers/Data/PluginKitPlugin/2CB3D46B-DDB5-480C-ACF4-E529EFBA2657/Documents/Inbox/com.apple.watchconnectivity/979DC929-E1BA-4C24-8140-462EC0B0655C/Files/EC57EBB8-827E-487E-8F5A-A07BE80B3269/image
Run Code Online (Sandbox Code Playgroud)

有线索吗?

  • 实际上我在循环中传输15-20个图像.
  • 有时当没有调试时,我注意到手表模拟器(也在实际手表中)显示的图像(并非全部)很少.我不知道WC会发生什么.
  • 传输用户信息字典没问题.

msk*_*msk 6

我发现了这个问题.我正在向主线程发送一些代码,文件移动代码也在其中.WC框架在此方法结束后立即清理文件,因此必须在此函数返回之前移动文件.我将该代码移到performInMainThread块之外,一切都像魅力一样.

public func session(session: WCSession, didReceiveFile file: WCSessionFile) 
{
   // Move file here
   performInMainThread { () -> Void in
         // Not here   
   }
}
Run Code Online (Sandbox Code Playgroud)