Невозможно передать данные с часов на iPhone в приложении Swift for iWatch - PullRequest
0 голосов
/ 27 февраля 2020

Я работаю с приложением iWatch для сбора информации о тренировках. И он работает нормально, собирая эти данные и сохраняя их в какой-нибудь zip-папке в каталоге документов. Но я должен передать этот почтовый индекс на iPhone. Итак, я использовал WatchConnectivity для обмена данными между часами на iPhone, но он способен передавать и никогда не получать на iPhone / симулятор.

Класс часов

import WatchKit
import Foundation
import WatchConnectivity

    class SummaryInterfaceController: WKInterfaceController, WCSessionDelegate {
        var session: WCSession?

    override func awake(withContext context: Any?) {
        super.awake(withContext: context)
        // Configure interface objects here.
        self.initalSetup()
    }

    private func initalSetup() {
        self.configureWatchKitSesstion()
        self.fetchHealthData()
    }
        func configureWatchKitSesstion() {
            if WCSession.isSupported() {
                session = WCSession.default
                session?.delegate = self
                session?.activate()
            }
        }


    private func fetchHealthData() {
            if let validSession = self.session {
                let data: [String: Any] = ["iPhone": "Data from iPhone" as Any] // Create your Dictionay as per uses
                validSession.transferUserInfo(data)
            }

}
func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {

}

func session(_ session: WCSession, didReceiveUserInfo userInfo: [String : Any] = [:]) {//**7
    print("received data: \(userInfo)")

}

iPhone класс

import UIKit
import WatchConnectivity

class ViewController: UIViewController
{
    var session: WCSession?//2

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        self.configureWatchKitSesstion()//4
    }

    func configureWatchKitSesstion() {
        if WCSession.isSupported() {//4.1
            session = WCSession.default//4.2
            session?.delegate = self//4.3
            session?.activate()//4.4
        }
    }

}

// WCSession delegate functions
extension ViewController: WCSessionDelegate {

    func sessionDidBecomeInactive(_ session: WCSession) {
    }

    func sessionDidDeactivate(_ session: WCSession) {
    }

    func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
    }

    func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String : Any]) {
        let receivedGlobal = applicationContext["iphone"] as? NSDictionary
    }

    func session(_ session: WCSession, didReceiveUserInfo userInfo: [String : Any] = [:]) {
        print("received data: \(userInfo)")
        DispatchQueue.main.async { //6
            if let value = userInfo["iPhone"] as? String {
                print("value is \(value)")
            }
        }
    }
}

Но, он никогда не вызывает делегатов класса телефона. Как это исправить?

...