Отправка CSV-файла с Apple Watch на телефон - ничего не происходит - PullRequest
0 голосов
/ 26 августа 2018

У меня есть эта функция в 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)")
    }
}

, которая вызывается, когда пользователь останавливает приложение на часах.Я знаю, что функция сработала, потому что я могу добавить оператор print в do catch, показывающий, что она была успешной.затем пытается работать с файлом, который был отправлен.Я не вижу никаких ошибок, но я также не вижу своего тестового сообщения печати. ​​

Я пытаюсь использовать файл 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) {

}

}

1 Ответ

0 голосов
/ 27 августа 2018

Метод, который вы используете transferFile(_:metadata:), работает асинхронно и блокируется системой для соответствия ограничениям Apple Watch по производительности и мощности.Вы должны быть в состоянии проверить состояние свойства Непродолжительный_ФайлТрансферы , чтобы убедиться, что вы правильно настроили передачу, но помимо этого вам может потребоваться переосмыслить способ обмена данными между двумя устройствами.

...