首页 > 解决方案 > 将 csv 文件从 Apple Watch 发送到手机 - 没有任何反应

问题描述

我有这个功能在Watchkit Extension...InterfaceController

func createAndSendCSV(data: Array<String>) {

    var csvText = "time, data\n"
    let fileName = "\(startTime).csv"
    let path = NSURL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(fileName)
    for row in data {
        csvText += row
    }

    do {
        try csvText.write(to: path!, atomically: true, encoding: String.Encoding.utf8)
        WCSession.default.transferFile(path!, metadata: ["time": startTime])
    } catch {
        print("Failed to create file")
        print("\(error)")
    }
}

当用户在手表上停止应用程序时调用。我知道该函数已被触发,因为我可以在 do catch 中添加一个打印语句,表明它是成功的。

ViewController我有以下内容,除了确保会话已激活然后尝试使用已发送的文件之外,它并没有太大的意义。我没有看到任何错误,但也没有看到我的打印测试消息。

我正在尝试使用 CSV 文件传输数据,因为由于消息大小,我无法通过 sendMessage 发送。任何人都知道为什么它可能不起作用?

import UIKit
import WatchConnectivity

class ViewController: UIViewController, WCSessionDelegate {

override func viewDidLoad() {
    super.viewDidLoad()
    if (WCSession.isSupported()) {
        let session = WCSession.default
        session.delegate = self
        session.activate()
    }
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


func session(_ session: WCSession, didReceive file: WCSessionFile) {
    DispatchQueue.main.async() {
        do {
            print("test")
            let contents = try String(contentsOf: file.fileURL, encoding: .utf8)
            self.sendData(data: contents)
        } catch {
            print("File Read Error for file \(String(describing: file.metadata))")
        }
    }
}

func sendData(data: String) {
    print(data)
}

// Not used but needs to exist
func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {

}

func sessionDidBecomeInactive(_ session: WCSession) {

}

func sessionDidDeactivate(_ session: WCSession) {

}

}

标签: swiftapple-watch

解决方案


您使用的方法transferFile(_:metadata:)以异步方式运行并被系统限制以适应 Apple Watch 对性能和功率的限制。您应该能够检查 pendingFileTransfers属性的状态,以确保正确设置传输,但除此之外,您可能需要重新考虑如何在两个设备之间共享数据。


推荐阅读