问题标签 [watchconnectivity]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
505 浏览

ios - Watchkit:sendMessage 的 watchos2 回复很慢

我正在使用 watchOS2 应用程序。我的手表应用程序执行一些 NSURLSession 任务(非常快)并使用 Watch Connectivity 向手机发送回复。我sendMessageData用来向电话发送请求,并在执行所需任务后发送回复。但是响应需要很长时间才能到达手表。有没有其他方法可以提供更快的响应。

我曾在以下文章中看到过类似的问题: 为什么从 WatchKit 扩展向 iOS 发送消息并得到回复如此缓慢?

在答案中,据说“sendMessage 比 WCSession 提供的其他通信 API 更昂贵”。

还有哪些通信 API 更快?

0 投票
0 回答
1665 浏览

ios - 无法转换类型“数组”的值' 到预期的参数类型'字符串?

我正在使用框架从手机向苹果手表发送一个名为字符串值WatchConnectivity的数组。watchItems我从已发送的字典中添加 ,并将其添加到手表上watchItems调用的数组中以在.itemsWKInterfaceTable

将标签的文本设置为 theItem 时,以下行发生错误。

这是我在做什么的完整解释。

苹果手机

self.items是一个NSManagedObjects 数组,每个项目都有一个名为的属性title,它是一个字符串。所以我循环遍历objects数组并将所有字符串值添加到一个名为watchItems.

苹果手表

这里我将接收到的消息字典中的 watchItems 数组添加到items手表上的数组中。该watchItems数组是一个字符串值items数组,手表上的数组也是如此。

WKInterfaceTable将标签重新加载并设置为 items 数组中的每个项目的函数。

将字符串值添加到cellLabel. 有人知道我哪里可能出错了吗?

0 投票
0 回答
193 浏览

ios - 通过 updateApplicationContext 从 Watch 发送字典到 iPhone

我对 WatchConnectivity 有疑问。

在我的应用程序中,我将带有数据的字典发送到我的 AppleWatch。一切都在我的手表上运行。在那里,用户可以更改一些数据(我有一个艺术家列表,用户可以在其中选中或取消选中艺术家)。更改后,列表应通过 WatchConnectivity 发送回我的 iPhone。我使用函数 updateApplicationContext。在我的 AppDelegate 类中,字典被正确读出,但之后我想将我的艺术家设置为 NSUserDefaults,但如果我调试,我的 NSUserDefaults 中没有更改的值。

任何人都知道如何将复杂对象(如数组等)发送回手机。

这是我的 AppDelegate

}

这是我的函数 importMyUserProfileFromSession

0 投票
1 回答
361 浏览

swift - 如何使用 Watch Connectivity 从 iPhone 发送的 [String] 数组填充表格行?

基本上,它可以很好地传递数组。只是在尝试将枚举数组用作 tablerows 时,它说 nil found。

电话

手表

我的问题是每当我尝试加载 TableView 时都会收到此控制台输出 + 错误:

有谁知道为什么展开的值仍然为零?我希望一旦我设置它并且可以看到 [String] 数组中有值,它可以枚举它,但似乎它们只是不可见的。

0 投票
1 回答
128 浏览

watchos-2 - WCSessionDelegate 激活 WCSession 后是否获得初始 sessionReachabilityDidChange?

在 watchOS 应用程序中设置 WCSession 时,WCSessionDelegate 的sessionReachabilityDidChange:方法是否总是在调用后立即被调用activateSession?从我的测试来看,这似乎是真的,但我在文档中没有找到任何确认。

我问是因为如果我可以依赖在sessionReachabilityDidChange:激活会话后立即被调用,我可以从 applicationDidBecomeActive 中删除一些冗余代码,用于检查可访问的会话并将一些初始消息发送到 iPhone 应用程序。

0 投票
3 回答
980 浏览

ios - 使用 transferCurrentComplicationUserInfo 观看连接更新复杂性

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

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

有什么建议么?还是我应该提交错误报告?

0 投票
0 回答
243 浏览

apple-watch - 在 Apple Watch 上使用 NSNotifications 传递 WCSession 消息

我有使用 Kugel 的 NSNotifications,它们在手表模拟器和 iPhone 和 iPhone 模拟器上运行良好,可以传递消息以更新 UI/状态,但是在设备上进行测试时,这些消息无法在手表端传递。

我认为的问题是 NSNotifications 是基于来自 iPhone 的 WCSession 消息触发的。在模拟器和 iPhone 端一切正常,可能是因为连接和通知总是传递,因为 sim 始终保持手表应用程序处于活动状态并且 iPhone 具有完整的会话支持。在手表上,会话和可能基于手表状态的通知都可能失败。

手表上的调试非常缓慢。启动调试过程需要 5-10 分钟!

有人可以指点我阅读有关如何最好地确保在手表上收到电话消息以及手表应用程序根据消息通知需要更新的内容吗?或者也许有一些很好的调试代码可以记录 WCSession 和 NSNotification 信息,我可以稍后查看?

我的代码相当简单,但仍在进行中....

在双方我创建一个单例来管理会话,这里是电话端代码:

这是手表方面:

我在 iPhone 端的 AppDelegate 和手表端的 ExtensionDelegate 中创建了单例,这是电话端:

发送消息时的基本逻辑是查看对方是否可达,如果是则使用 sendMessage,如果不可达则使用 sendApplicationContext。

当在手机端收到消息时,有一些额外的逻辑来查看应用程序是在前台还是后台,如果在前台,它会将通知推送到主线程,如果在后台,则只更新信息。在手表方面,它总是推送到主线程,因为我的理解是消息不会在后台接收。

0 投票
0 回答
86 浏览

watchos-2 - 调用了错误的 WCSessionDelegate 回调函数

我使用 WCSession.defaultSession().sendMessage 函数将消息从手表发送到 iphone,非 nil replyHandler 闭包

在 iPhone 上,

被调用而不是应该被调用的回调:

因此我不能调用replyHandler :-(

知道为什么吗?多谢!

编辑:用于拨打电话的代码:

0 投票
2 回答
270 浏览

ios - 是否可以在后台使用 WatchConnectivity

我有一个使用 WatchConnectivity 框架在 Safari 中打开 URL 的 watchOS 应用程序。当我的应用程序同时在 iPhone 上运行并在 Apple Watch 上运行时,按下 Apple Watch 应用程序上的打开 URL 按钮确实会在 iPhone 上启动 Safari,就像我使用 WCSessionDelegate 实现的那样。但如果 iPhone 应用程序没有运行,这将不起作用。即使 iPhone 应用程序未处于活动状态,是否可以在按下 Apple Watch 上的按钮时在 iPhone 上启动 URL?谢谢。

0 投票
4 回答
3558 浏览

ios - didReceiveApplicationContext 没有被调用

我刚刚使用教程/示例代码在我的应用程序中设置了 WCConnectivity,我觉得我已经正确实现了它。我没有使用模拟器进行测试。出于某种原因,在手表应用程序中没有调用 didReceiveApplicationContext,即使一切设置正确。

我尝试调用 WatchKit 应用程序的接口控制器,在 ExtensionDelegate 中并使用 NSUserDefaults 来设置接口控制器数据。

iOS 应用

视图控制器.m

观看分机代码

ExtensionDelegate.m

接口控制器.m