使用transferCurrentComplicationUserInfo观察连接更新复杂性

时间:2016-03-02 18:41:39

标签: ios watchkit watchconnectivity apple-watch-complication clockkit

我遇到了WatchConnectivity和可能的Clockkit框架问题。 我尝试在iOS应用中使用transferCurrentComplicationUserInfo将数据发送到手表并更新复杂功能。 在我的扩展委托中,我已经实现了委托方法didReceiveUserInfo,我处理数据然后调用以更新复杂化。

当我在模拟器上运行iOS应用程序时,一切正常。但是,如果我在实际设备上运行它,从手机开始传输,复杂性调用requestedUpdateDidBegin(),但手表上的扩展内的didReceiveUserInfo从未被调用,因此我没有数据并发症。

有什么建议吗?或者我应该提交错误报告?

3 个答案:

答案 0 :(得分:1)

在Apple Watch上设置WCSession对象听起来像是一个问题。对于复杂性,我建议在ExtensionDelegate的init方法中执行此操作。这样做的原因是,只有在启动手表扩展程序(主要手表应用程序)时才调用applicationDidFinishLaunching,而不是在显示复杂功能或扫视时。

override init() {
    super.init()

    // Setup watch connectivity. We do this here because applicationDidFinishLaunching is only
    // called when the watch extension is being called, not when a complciation is being updated
    self.session.delegate = self
    self.session.activateSession()
}

答案 1 :(得分:1)

在确定永远不会调用扩展名之前,您应该通过“设备”窗格检查Watch(控制台)日志消息。扩展可能在后台启动,而不是附加到调试器,因此您不会在Xcode控制台中看到NSLog消息。

更重要的是,您可能已将一些并发症userInfo从手机转移到手表,但在手表收到该手表时似乎没有对该词典做任何事情。您必须做的不仅仅是转移当前的并发症信息。复制数据源需要在调用getCurrentTimelineEntryForComplication时访问该信息(由于时间线被重新加载)。

可能的原因

你没有共享很多代码,所以我发表了how transferCurrentComplicationUserInfo actually works,并提到了我在你的代码中看到的一个无关的问题。

如果没有更多代码,很难提供具体的答案,但我会尝试为将来可​​能遇到此问题的其他人提供帮助。

以下是未调用您的扩展程序didReceiveUserInfo的一些可能性。

  • 您在多个地方激活了WCSession,而转移是(非)由另一位代表处理。
  • 您没有持有对已激活会话的引用,但它超出了范围。
  • 该应用程序尚未在Watch上打开。
  • 会话未尽快或正确地启动。
  • 由于您的手机已被锁定,因此
  • transferCurrentComplicationUserInfo因错误而失败。 (This is a known issue that Apple has acknowledged, and there is a workaround.

代码如何帮助改善您的问题和答案

提供代码的目的是识别或消除某些东西不起作用的原因。代码通常是必要的,以帮助回答“为什么这不起作用?”编程问题。

仅仅因为它恰好在模拟器中工作,并不能保证你“正确设置”。在设备上进行测试可以发现在模拟器中测试时从未发现的错误。

答案 2 :(得分:1)

这可能是因为您超出了transferCurrentComplicationUserInfo传输数据的系统限制,因为您一天只能传输50次

从iOS传输数据 或者,如果您的watchOS应用程序具有配套的iOS应用程序,则可以在iOS应用程序中收集数据,然后将该数据传输到Apple Watch。但是,此更新策略将手表与伴侣iPhone捆绑在一起。如果用户不带手机冒险出去,则无法更新并发症,这种情况可能会导致过时或不准确的并发症。另外,像推送通知一样,系统每天限制您进行50次复杂的传输。

您可以通过以下方式查看允许的转帐剩余时间: remainingComplicationUserInfoTransfers