Apple Watch 不向 iPhone 传递数据 - Swift
Posted
技术标签:
【中文标题】Apple Watch 不向 iPhone 传递数据 - Swift【英文标题】:Apple Watch Not Passing Data to 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 发送错误”。
我知道它没有发送,但我不知道为什么。有谁知道为什么这不起作用?
注意:我运行的是模拟器,但我很确定这不是问题。
【问题讨论】:
【参考方案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 语句对消息进行排序。再次感谢!以上是关于Apple Watch 不向 iPhone 传递数据 - Swift的主要内容,如果未能解决你的问题,请参考以下文章
一种选择性地将 UILocalNotification 传递到 iPhone 和 Apple Watch 的方法?
为啥我的 iPhone 无法从 Apple Watch 获取心率数据,但手表扩展程序却可以?