gpt4 book ai didi

ios - 使用 WatchConnectivity 将姓名和生日发送到Watch

转载 作者:行者123 更新时间:2023-11-28 15:56:04 30 4
gpt4 key购买 nike

我正在访问一个用户的联系人,以便将联系人姓名和生日从 iPhone 发送到 AppleWatch。我可以访问联系人并可以在手机上显示数据,但我无法使用 WatchConnectivity 发送信息。我正在使用 Ray Wenderlich 的书 WatchOS by Tutorials作为向导,但我仍然遇到问题。

这是我在手机端设置 AppDelegate.swift 中的 Watch Connectivity 的内容。

// MARK:  Watch Connectivity
extension AppDelegate: WCSessionDelegate {

func sessionDidBecomeInactive(_ session: WCSession) {
print("WC Session did become inactive.")
}

func sessionDidDeactivate(_ session: WCSession) {
print("WC Session did deactivate.")
WCSession.default().activate()
}


func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
if let error = error {
print("WC Session activation failed with error:" + "\(error.localizedDescription)")
return
}
print("Phone activated with state:" + "\(activationState.rawValue)")
}

func setUpWatchConnectivity() {
if WCSession.isSupported() {
let session = WCSession.default()
session.delegate = self
session.activate()
}
}

}

这在 ViewController.swift

// MARK Watch Connectivity

extension ViewController {


func sendNameAndBirthdayToWatch() {
if WCSession.isSupported() {
let session = WCSession.default()
if session.isWatchAppInstalled {
let nameAndBirthday = ["name": nameLabel.text, "birthday": birthdayLabel.text]
do {
try session.updateApplicationContext(nameAndBirthday)
} catch {
print("Error")
}
}
}
}

}

我正在用电话上的 UIButton 调用 sendNameAndBirthdayToWatch()。作为原型(prototype),手机目前在从 Xcode 模拟器中的联系人中提取的两个单独标签上显示姓名和生日,因此我至少知道我正在获取数据。

ExtensionDelegate.swift 我有 watch 。

// MARK: Watch Connectivity
extension ExtensionDelegate: WCSessionDelegate {

func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
if let error = error {
print("Activation failed with error: \(error.localizedDescription)")
return
}
print("Watch activated with activation state: \(activationState.rawValue) ")
}

func setupWatchConnectivity() {
if WCSession.isSupported() {
let session = WCSession.default()
session.delegate = self
session.activate()
}
}

func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String : Any]) {
if let name = applicationContext["name"] as? String, let birthday = applicationContext["birthday"] as? String {
InterfaceController.sharedInterfaceController.updateWatchLabel(name: name, birthday: birthday)
}
}
}

这就是我卡住的地方。我不确定哪里出了问题和/或如何前进。

我正在 watch 上的 InterfaceController.swift 中调用 updateWatchLabel(),但我没有看到任何结果。

提前感谢您的帮助。我整整一周都在盯着这个看,不幸的是,Wenderlich 书中的示例项目对我的理解来说有点太复杂了。

我正在使用 Xcode 8.2.1 和 Swift 3。

最佳答案

我及时回答了我自己的问题。

这是ViewController.swift 中手机上的代码。代码与我在 AppDelegate.swift 中的原始帖子相同。

    func sendMessageToWatch() {
if WCSession.isSupported() {
let session = WCSession.default()
if session.isWatchAppInstalled {
do {
let message = ["message": "A message as String"]
try session.updateApplicationContext(message)
} catch {
print("Error: \(error)")
}

} else if session.isWatchAppInstalled == false {
print("No watch app installed")
}
}
}

我现在通过按手机上的 UIButton 来调用此函数。然后在接收端的 InterfaceController.swift 中的 watch 端。我基本上将代码从 ExtensionDelegate.swift 移到了 InterfaceController.swift

    // MARK: Watch Connectivity
func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
if let error = error {
print("Activation failed with error: \(error.localizedDescription)")
return
}
print("Watch activated with activation state: \(activationState.rawValue) ")
}


func setupWatchConnectivity() {
if WCSession.isSupported() {
let session = WCSession.default()
session.delegate = self
session.activate()
}
}

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

DispatchQueue.main.async(execute: {
self.label.setText(message)
})

}

关于ios - 使用 WatchConnectivity 将姓名和生日发送到Watch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41722684/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com