问题标签 [apple-watch-complication]

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 投票
0 回答
158 浏览

ios - 是否可以在 WatchKit Complications 中进行异步操作?

我发现在 watchOS 2 复杂性中执行异步操作会产生随机结果。有时操作会完成并且复杂功能会更新,有时则不会。一个这样的例子是查询 HealthKit。

此代码将导致大约一半时间调用处理程序。我究竟做错了什么?

0 投票
2 回答
128 浏览

watchkit - 我怎样才能让并发症的标题包裹到身体线条上?

我有一个短语将是整个复杂性。有时它足够短,可以单独占据标题。然而,有时它太长了,我需要它来包裹身体线条。我一生都无法弄清楚如何获得这种行为。例如:

phrase1足够短以适合标题行。

对于phrase2, 仅"Very very ve..."显示在标题行上。我需要将其余部分显示在身体线条上。

这是代码:

0 投票
1 回答
1161 浏览

ios - 如何连接和调试自定义 ClockKit Complications 控制器?

我正在尝试让自定义 ClockKit 复杂功能正常工作。

  1. 我创建了一个自定义的ComplicationController符合CLKComplicationDataSource. 它被添加到 Watch Extension 的 plist 中CLKComplicationPrincipalClass

我可以在手表上选择一个复杂功能并激活它,但我只看到“---------------”而不是我的实际占位符。

我试过的

  • 我向我的 ComplicationController 添加了自定义override init(){…}并在其中放置了一个断点以进行调试。但即使在运行 Complication构建方案时,也永远不会达到这个断点。似乎我的自定义 ComplicationController 从未实例化。

  • 我确实看到了一条日志消息Extension received request to wake up for complication support.,但我不清楚这是在代码中的何处触发的。

  • 我还尝试从我的主要电话中拨打以下电话,InterfaceController以了解我的活跃并发症

    ......但server返回零。没有并发症似乎是活跃的和重新加载。

问题

  • 如何成功连接我的自定义 ComplicationController?

    也欢迎任何额外的调试技巧。

    从手表模拟器或 iPhone 上的手表应用程序中删除并发症通常是否足够,或者您是否需要重新安装整个手表应用程序才能看到与并发症相关的更新生效?此外,当我在我的自定义 ComplicationController 中记录某些内容时,我应该只在使用 Complications 构建方案还是使用普通 Watch App 构建方案运行时才能看到它的输出?

欢迎任何寻找问题的想法。

0 投票
1 回答
1810 浏览

watchos-2 - Apple Watch 复杂功能未在后台更新

我有一个 Apple Watch 复杂功能,可以正确初始化并显示我期望的数据。但是,当我的 getNextRequestedUpdateDateWithHandler 方法中返回的 NSDate 触发刷新时,我的委托中唯一被再次调用的方法是 getNextRequestedUpdateDateWithHandler 方法(我在每个方法上都设置了断点来确定这一点)。我本来希望在请求的更新日期发生时调用 requestedUpdateDidBegin ,但情况似乎并非如此。有谁知道这可能是什么原因造成的?这是我的代码:

0 投票
1 回答
672 浏览

watchos-2 - 使用 HealthKit 查询时,Apple Watch 复杂功能不会在后台刷新

我试图在 Apple Watch 复杂功能中显示用户的每日步数。我通过调用 HKHealthStore 的 requestAuthorizationToShareTypes 方法来设置我的课程,当首次将其添加到表盘时,复杂功能会正确显示步骤。但是,在进行健康包查询时,刷新永远不会成功。我怀疑这与 HealthKit 权限有关,因为 HKSampleQuery 的完成处理程序没有被调用。如果我只是注释掉 health kit 查询,那么我的代码会按预期刷新。有谁知道我可能会错过什么?或者如果复杂的后台刷新不允许访问 HealthKit?

这是有效的代码块:

这是不起作用的代码块。错误情况下的更新甚至不会被调用:

0 投票
0 回答
78 浏览

ios - Apple Watch 复杂功能扩展

我正在为 Apple Watch 创建一个复杂功能,但我遇到了一个疑问。

现在,我已经为时间线设置了一个包含 5 个条目的数组,并且一切正常。我的问题是,当请求返回 nil 时会发生什么,比如在显示 5 个条目之后?

Watch 是否会刷新自身并再次执行所有委托方法以填充条目,或者它是否停止工作,因为它没有更多信息可显示,因为已经显示了 5 个条目?

如果是这样,有没有办法在数组本身的末尾添加另一个条目?当数组的第一个条目通过时,我有办法在它的末尾附加一个新条目,所以我总是会显示 5 个条目,并且应用程序不会用完信息来显示?

这可能听起来令人困惑,但我希望你能明白我的意思,希望我的英语是可以理解的。

亲切的问候。

0 投票
1 回答
919 浏览

ios - 如何在后台刷新的并发症上显示 HealthKit 数据?

我正在尝试构建一个显示用户健康数据的 watchOS 2 复杂功能,例如步骤(但理论上它应该能够显示用户授予应用查看权限的任何健康数据)。当并发症首次启动时,我可以查询 Healthkit 并获取我想要的所有数据,因为第一次启动被认为是在前台。但是,当有新的健康数据可用时,我无法在后台检索 HealthKit 数据。我可以从两个地方获取这些数据,手表和 iPhone。

当从getNextRequestedUpdateDateWithHandler中设置的日期触发并发症的后台刷新时,我试图从手表本身获取数据。但是,当我调用 HKHealthStore 的 execute 方法时,如果应用程序(或者在本例中为并发症)正在后台运行,它不会返回任何查询结果。我还尝试设置一个 HKAnchoredObject 查询,该查询应该在进程恢复时立即返回我的结果,但这似乎也不会返回任何结果,除非我在手表上手动启动应用程序扩展。这是我的手表代码,在请求健康包权限后从我的 ExtensionDelegate 的 init 方法调用:

我还尝试使用 HKObserverQuery 从 iPhone 获取数据。我有一个可以每小时唤醒一次 iPhone 的观察者查询(步骤数据的最长时间)。但是,如果在观察者完成处理程序执行我的步骤查询时 iPhone 被锁定,HKHealthStore 的执行方法也拒绝返回任何查询结果。我认为这在这里是有道理的,并且可能没有办法解决这个问题,因为Apple 的文档提到,当设备被锁定并且您无法从商店读取(只能写入)时,Health Store 是加密的。但是在手表的情况下,当它戴在某人的手腕上时,它没有被锁定,屏幕只是关闭了。

有谁知道如何让 HealthKit 更新在后台发生刷新时显示在并发症上,无论是在 iOS 还是在 watchOS 2 上?

0 投票
1 回答
285 浏览

watchkit - Watchkit 复杂功能和位置更新?

我正在尝试编写一个使用位置数据的复杂功能。我可以在复杂控制器中获取位置数据,但由于结果异步返回,它似乎永远无法正常工作。

使用特定位置数据更新并发症的最佳方法是什么?我认为在并发症中获取位置并不是一个好主意(即使你可以)。

0 投票
1 回答
672 浏览

ios - 在 WatchOS2 中使用 NSURLSession 后台任务

想知道我们将如何在 watchOS 2 中使用 NSURLSession 后台任务。

我想在并发症醒来时生成后台下载。我不清楚的是我会在哪里找到application:handleEventsForBackgroundURLSession

WatchKit 扩展的哪一部分会被唤醒,我在哪里可以得到这个回调?这部分在文档中不是很清楚。

0 投票
1 回答
2918 浏览

watchkit - How to update Watch Complication only when the watch is awake, to not use up the daily budget

I have a server that keeps 2 booleans. These booleans change every 15 seconds.

Whenever I wake my Apple Watch, I want the complication to show the current state. How can I do it withough exhausting the budget early on?

The best way would be to fetch the newest state into the complication whenever I wake my watch. The only possible way I see would be to poll the server (either directly or via my phone) every 15 seconds. The problem is that I'd soon use up all the allotted time.

It would be great if I could make the complication only update when the watch was woken up. Can that be done?