Swift apple watch和iPhone之间的通信速度非常慢
我编写了一个非常基本的Xcode项目,其中包含3个目标: -iOS目标 -WatchKit应用程序 -手表套件分机 首先,我不明白为什么Xcode会为WatchKit应用程序创建第二个目标(扩展)?似乎WatchKit应用程序包含故事板,WatchKit扩展包含swift代码(控制器)。Xcode设计和拆分两个目标而不是一个目标有什么特别的原因吗 请看这段非常基本的代码: iOS控制器:Swift apple watch和iPhone之间的通信速度非常慢,swift,Swift,我编写了一个非常基本的Xcode项目,其中包含3个目标: -iOS目标 -WatchKit应用程序 -手表套件分机 首先,我不明白为什么Xcode会为WatchKit应用程序创建第二个目标(扩展)?似乎WatchKit应用程序包含故事板,WatchKit扩展包含swift代码(控制器)。Xcode设计和拆分两个目标而不是一个目标有什么特别的原因吗 请看这段非常基本的代码: iOS控制器: override func viewDidLoad() { super.viewDidLoad()
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)
})
}
}
值班分机(InterfaceController.swift):
你当然明白,我的iOS应用程序上有一个按钮。当我点击此按钮时,我会向Watch应用程序发送一条消息,此应用程序将更改按钮颜色
在iPhone上点击按钮和颜色改变之间有大约5-6秒的延迟。你知道为什么吗?
在通信的另一端(观察iPhone),情况最糟糕(10-15秒)
谢谢因为您正在更新UI,所以需要将其包装在DispatchQueue中,如下所示:
DispatchQueue.main.async {
self.btn.setBackgroundColor(UIColor.yellow)
}
这些委托回调不在主线程上,您不应该从主线程以外的任何其他线程更新UI。这样包装可以更快地更新UI和更安全的代码
DispatchQueue.main.async {
self.btn.setBackgroundColor(UIColor.yellow)
}