打开 WatchOS2 时获取更新的应用程序上下文
Posted
技术标签:
【中文标题】打开 WatchOS2 时获取更新的应用程序上下文【英文标题】:Fetch updated Application Context when opening WatchOS2 【发布时间】:2016-09-06 19:25:50 【问题描述】:所以我已经阅读了很多关于 WatchOS2 的教程。
我可以从 iPhone 模拟器和 iWatch 模拟器(当两者都处于活动状态时)增加、减少计数器(标签值)。
当 ios 应用处于非活动状态(终止)时,watchOS2 应用处于活动状态,在 watchOS2 应用中更改值,然后打开 iOS 应用,计数器标签正在更改。
但是反过来是行不通的。在 watchOS2 应用程序处于非活动状态(终止)时更改 iOS 应用程序中的标签计数器。然后打开 watchOS2 应用,但值不变或与 iOS 应用不同。
为了改变值我使用了这个方法
NSDictionary *dic = @@"counter":[NSNumber numberWithInt:self.counter];
WCSession *session = [WCSession defaultSession];
NSError *error;
[session updateApplicationContext:dic error:&error];
我使用了this 教程,根据本教程[session updateApplicationContext:dic error:&error];
是一种更新或更改整个上下文的方法。因此,当 watchOS2 应用程序处于活动状态时,它不应该获取在 watchOS2 应用程序终止时由 iOS 应用程序更新的最新上下文。
请建议我必须做什么。我没有找到一个解决方案或找到所有教程,都没有解决这个问题。
【问题讨论】:
从讨论到我的回答:您的问题并未准确描述您的体验。请出示负责接收的代码,包括您的设置方式。 【参考方案1】:您有两个应用程序上下文:一个从 iOS 到 watch os,一个反之亦然。不要认为它们是一体的。
您可以考虑以下想法:
仅使用从 iOS 应用到手表的上下文。
iOS 保存状态,将状态更新作为上下文发送到手表,就像您之前所做的那样。
如有必要,通过用户信息队列将差异从 watchOS 发送到 iOS。用户信息消息应包含类似“计数器加 1”的内容。用户信息不会丢失,如果暂时无法交付,则会排队。
当 iOS 应用收到“计数器加 1”时,它会执行此操作,更新其 UI,并将最终结果作为上下文发送给手表。
当用户有两个手表时,这也应该有效。
【讨论】:
我知道两者都是不同的上下文。但我们所能做的就是在接收更改通知的同时更新上下文。如何将 iOS 上下文传递给手表 没有将上下文从手表发送到 iOS,因为在我的情况下它没有意义,原因与你的情况类似。我所做的和有效的是将用户信息从手表发送到 iOS,并带有我所描述的更新信息。您可以在上下文中添加时间戳或版本号。然后你发送用户信息“add 1 to counter of version xxx” 那行不通,那发送字符串呢。如果我们在 iOS 应用程序中设置一些值,而手表应用程序被终止/不活动会怎样。然后我打开watchapp后,我将无法获取更新的数据?如果应用 dsnt 有任何服务器。 为什么不起作用?我没有说明您用于传输信息的数据格式。你使用字符串或任何适合你的东西。如果您继续按照建议从 iOS 应用程序向手表应用程序发送上下文,您的方案就可以正常工作。 手表应用没有收到?那么您的错误可能是您只是在等待手表应用程序中的回调。你必须在你的手表应用程序中做这两件事:在启动时从会话中读取上下文和等待带有更新上下文的回调。以上是关于打开 WatchOS2 时获取更新的应用程序上下文的主要内容,如果未能解决你的问题,请参考以下文章