簡體   English   中英

如何使用 WatchConnectivity 將數據發送回 iPhone

[英]How can I send a data back to iPhone using WatchConnectivity

我有一個帶有多個計數器的習慣應用程序。 現在我弄清楚如何將計數器的值發送到 iWatch。 問題是:當我按下按鈕並更改 iWatch 上的計數器值(例如 +1)時,如何將數據發送回 iPhone?


要從 iPhone 發送計數值,我在 ViewController 中有一個代碼:

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

  var session: WCSession?

var count = 0

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

    if WCSession.isSupported() {
          session = WCSession.default
          session?.delegate = self
          session?.activate()
      }
}

    @IBAction func addPlusOne(_ sender: UIButton) {
    let count += 1
    let sendHabit = String(count)
    if let validSession = session {
              let iPhoneAppCount = ["Habits": sendHabit]

              do {
                  try validSession.updateApplicationContext(iPhoneAppCount)
              } catch {
                  print("Something went wrong")
              }
          }

要接收 iWatch 的計數值,我在 InterfaceController 中有代碼:

     let session = WCSession.default

override func awake(withContext context: Any?) {
    super.awake(withContext: context)

       processApplicationContext()
       processApplicationCount()

       session.delegate = self
       session.activate()
}

    func processApplicationCount() {
    if let iPhoneContext = session.receivedApplicationContext as? [String : String] {

        displayLabel.setText(iPhoneContext["Habits"])

    }
}

func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String : Any]) {
    DispatchQueue.main.async() {
        self.processApplicationCount()
    }
}

將數據從 Apple Watch 傳輸到 iPhone,反之亦然。

對於全局變量,您可以使用 Watch 中 WCSession 的 updateApplicationContext():

let session = WCSession.default()
if session.activationState == .activated {
    session.updateApplicationContext(["my_global": g_myGlobal])
}

然后在電話上,您應該為 WCSession 分配一個委托並實現以下內容:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM