gpt4 book ai didi

swift - Apple Watch 和 iPhone 之间的通信速度非常慢

转载 作者:搜寻专家 更新时间:2023-11-01 05:35:15 26 4
gpt4 key购买 nike

我写了一个非常基本的 Xcode 项目,其中包含 3 个目标:- iOS 目标- WatchKit 应用程序- WatchKit 扩展

首先,我不明白为什么 Xcode 会为 WatchKit 应用程序创建第二个目标(扩展)? WatchKit 应用程序似乎包含 Storyboard,而 WatchKit 扩展包含 swift 代码( Controller )。 Xcode 设计和拆分 2 个目标而不是一个目标是否有特殊原因?

看看这段非常基本的代码:

iOS Controller :

override func viewDidLoad()
{
super.viewDidLoad()

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

@IBAction func on_btn_tap(_ sender: Any)
{
if WCSession.isSupported()
{
let session = WCSession.default()
session.sendMessage(["mykey": "myvalue"], replyHandler: { (response) -> Void in

NSLog("OK")

}, errorHandler: { (error) -> Void in
NSLog("Error)
})
}
}

watch 扩展(InterfaceController.swift):

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

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

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

}

func session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Void)
{
self.btn.setBackgroundColor(UIColor.yellow)
}
}

如您所知,我的 iOS 应用程序上有一个按钮。当我点击此按钮时,我会向 Watch App 发送一条消息,此应用会更改按钮颜色。

在 iPhone 上点击按钮和颜色变化之间有大约 5-6 秒的延迟。你知道为什么吗 ?在对方通信端(watch to iPhone),最差(10-15秒)

谢谢

最佳答案

由于您正在更新您的 UI,因此您需要将其包装在 DispatchQueue 中,如下所示:

DispatchQueue.main.async {
self.btn.setBackgroundColor(UIColor.yellow)
}

这些委托(delegate)回调不在主线程上,您永远不应该从主线程以外的任何其他线程更新您的 UI。像这样包装它可以更快地更新您的 UI 和更安全的代码。

关于swift - Apple Watch 和 iPhone 之间的通信速度非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42191502/

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