swift - 将 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) {
}
}
解决方案
您使用的方法transferFile(_:metadata:)
以异步方式运行并被系统限制以适应 Apple Watch 对性能和功率的限制。您应该能够检查
pendingFileTransfers属性的状态,以确保正确设置传输,但除此之外,您可能需要重新考虑如何在两个设备之间共享数据。
推荐阅读
- c# - 获取xml中子节点的值
- python - 使用 QtWidgets.QSlider 将 Waitkey 更改为“0”无效
- node.js - 如何用 pino 序列化错误对象?
- java - 如何在 Android 10 上创建视频文件路径
- gdb - GDB 定义命令:print $arg1 在定义时不打印正确的值
- pyspark - PySpark:在 Pandas UDF 中使用 pyproj 包时,如何解决“python worker 无法连接回来”错误?(将纬度/经度转换为 UTM 坐标)
- python - .eq() 方法给出的结果与 [ == ] 不同
- templates - 没有使用最新的 Kotlin 导航抽屉活动模板的 onNavigationItemSelected 实现
- visual-studio-code - 在 VS-Code 中按 ALT+Shift+F 时调整换行符
- html - 将标签应用于 svg 路径