我已经写了一个非常基本的Xcode项目,其中包含3个目标:- iOS目标- WatchKit应用程序- WatchKit扩展
首先,我不明白为什么Xcode要为WatchKit应用程序创建第二个目标(扩展)?看起来WatchKit应用包含了故事板,而WatchKit扩展包含了swift代码(控制器)。Xcode设计和拆分两个目标而不是一个目标有什么特别的原因吗?
看看这段非常基本的代码:
iOS控制器:
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)
})
}
}
On 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秒的延迟。你知道为什么吗?在另一个通信端(观看iPhone),它是最差的(10-15秒)
谢谢
发布于 2019-08-02 17:43:48
由于您要更新UI,因此需要将其包装在DispatchQueue中,如下所示:
DispatchQueue.main.async {
self.btn.setBackgroundColor(UIColor.yellow)
}
这些委托回调不在主线程上,您不应该从主线程以外的任何其他线程更新您的UI。像这样包装它会使你的UI更新更快,代码更安全。
https://stackoverflow.com/questions/42191502
复制相似问题