Я работаю с приложением 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)")
}
}
}
}
Но, он никогда не вызывает делегатов класса телефона. Как это исправить?