【问题标题】:Apple Watch Not Passing Data to iPhone - SwiftApple Watch 不向 iPhone 传递数据 - Swift
【发布时间】:2017-01-04 14:13:47
【问题描述】:

我正在尝试将字符串从我的 Apple Watch 传递到 iPhone,但它似乎没有连接。这是我的代码:

ViewController.swift :

import UIKit
import WatchConnectivity

class ViewController: UIViewController, WCSessionDelegate {

    @IBOutlet weak var lablel: UILabel!
    var string = "Hello World"
    let session = WCSession.default()


    override func viewDidLoad() {
        super.viewDidLoad()

        session.delegate = self
        session.activate()

    }


    func session(_ session: WCSession, didReceiveMessage message: [String : Any]) {
        let msg = message["StringValueSentFromiWatch"] as! String
        lablel.text = "Message : \(msg)"

        print("iphone recieved message")
    }

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

    }

    func sessionDidBecomeInactive(_ session: WCSession) {

    }

    func sessionDidDeactivate(_ session: WCSession) {

    }
}

InterfaceController.swift :

import WatchKit
import Foundation
import WatchConnectivity


class InterfaceController: WKInterfaceController, WCSessionDelegate {

     let session = WCSession.default()

    override func willActivate() {
        super.willActivate()

        session.delegate = self
        session.activate()
    }

    @IBAction func SendPressed() {

        //Send Data to iOS
        let msg = ["StringValueSentFromiWatch" : "Hello World"]
        session.sendMessage(msg, replyHandler: { (replay) -> Void in
            print("apple watch sent")
        }) { (error) -> Void in
         print("apple watch sent error")
        }

    }

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

}

我正在尝试向 iPhone 发送“Hello World”,但我在控制台中得到了这个打印输出:

errorHandler: 是 WCErrorCodePayloadUnsupportedTypes

和“Apple Watch 发送错误”。

我知道它没有发送,但我不知道为什么。有谁知道为什么这不起作用?

注意:我运行的是模拟器,但我很确定这不是问题。

【问题讨论】:

    标签: ios iphone swift watchkit apple-watch


    【解决方案1】:

    我认为您在 sendMessage() 中搞砸了,我无法计算出 replyHandler 语法,并且您错过了 errorHandler: 参数。

    无论如何,我已经尝试了您的代码,并且进行了一些更改。

    1)。在 InterfaceController 中,sendPressed():

        var count = 0    
    @IBAction func SendPressed() {
        //Send Data to iOS
        let msg = ["Count" : "\(count)"]
    
        if session.isReachable {
            session.sendMessage(msg, replyHandler: nil, errorHandler: { (error) -> Void in
                print("Error handler: \(error)")
            })
            count += 1
        }
    }
    

    我添加了一个计数,因为每次通话的消息必须有所不同(以节省电池电量),因此您现在可以连续按下该按钮数次。并检查以验证主机应用程序是否可访问。

    2.) 在 ViewController 中,记得在主线程上更新 GUI:

        func session(_ session: WCSession, didReceiveMessage message: [String : Any]) {
        DispatchQueue.main.async {
            self.lablel.text = "Message : \(message)"
        }
    }
    

    否则收到数据时标签不会更新。

    如果对你有帮助,请告诉我!

    【讨论】:

    • 我必须保留这一行:让 msg = message["Test"] as!字符串
    • 所以我可以使用 if msg == "App1" { 来使用 if 语句对消息进行排序。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多