苹果手表与iPhone之间的沟通非常缓慢

时间:2017-02-12 18:28:09

标签: swift

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

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

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

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)
        })
    }
}

在观看扩展(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应用程序上有一个按钮。当我点击此按钮时,我向观看应用程序发送消息,此应用程序将更改按钮颜色。

iPhone上的按钮点按和颜色变化之间有大约5-6秒的延迟。你知道为什么吗 ? 在另一个通信方面(注意iPhone),它是最糟糕的(10-15秒)

由于

1 个答案:

答案 0 :(得分:0)

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

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

这些委托回调不在主线程上,并且您不应从主线程以外的任何其他线程更新UI。像这样包装起来可以更快地更新UI和更安全的代码。