我遇到了WatchConnectivity和可能的Clockkit框架问题。
我尝试在iOS应用中使用transferCurrentComplicationUserInfo
将数据发送到手表并更新复杂功能。
在我的扩展委托中,我已经实现了委托方法didReceiveUserInfo
,我处理数据然后调用以更新复杂化。
当我在模拟器上运行iOS应用程序时,一切正常。但是,如果我在实际设备上运行它,从手机开始传输,复杂性调用requestedUpdateDidBegin()
,但手表上的扩展内的didReceiveUserInfo
从未被调用,因此我没有数据并发症。
有什么建议吗?或者我应该提交错误报告?
答案 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
,而转移是(非)由另一位代表处理。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