问题标签 [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 投票
1 回答
349 浏览

watchkit - 点击复杂功能时是否可以启动不同的应用程序?

例如,我的应用程序名为 Complicate It。当前,当点击其复杂功能时,将打开复杂功能。当点击并发症时,我希望能够打开另一个应用程序,比如消息。这是可能吗?

0 投票
1 回答
1817 浏览

ios - 如何使用来自complicationController的sendMessage唤醒iOS父应用程序

我正在尝试通过从 watchkit 扩展发送消息来唤醒 iOS 父应用程序。

这只有在从 watchApp / ViewController 调用下面的 sendMessage 函数时才有效。当从 ComplicationController 调用它时,会发送消息,但 iOS 父应用程序现在确实会唤醒。

任何建议表示赞赏。(请在 Swift 中引用任何代码)

这里的简化代码:

在 AppDelegate 和 ExtensionDelegate 中:

在 ExtensionDelegate 中:(这里没问题,消息发送成功)

在 AppDelegate 中:(当 iOS 应用程序未运行/不在前台时未收到)

这是从复杂控制器调用函数的方式(它确实发送消息但不唤醒父应用程序):

0 投票
1 回答
574 浏览

ios - 如何正确实现将设置从 iOS 应用程序传输到 watchOS2 并发症

我想要实现的是以下内容:

  1. 并发症在后台每隔 30 分钟更新一次
  2. 每当手表应用程序运行并接收到自己的更新数据时,并发症就会得到更新
  3. 每当 iOS 应用程序运行并且用户更改影响手表数据的设置(例如更改天气观测的位置或显示单位)时,都会更新复杂功能

第 1 项和第 2 项似乎很简单,在这里很好地解决了:更新 Apple Watch 复杂数据的流程是什么?

但是,对于第 3 项,在 iOS 应用程序中,我设置了一个 WCSession 实例并调用 transferCurrentComplicationUserInfo,将新设置作为 NSDictionary 发送。在监视扩展中,这会调用 WCSessionDelegate 中的 didReceiveUserInfo。

我遇到的问题是 watchOS 在一个单独的线程中调用了 requestedUpdateDidBegin,在它调用 didReceiveUserInfo 之后不久,它开始执行,然后我有机会使用从应用程序新收到的 UserInfo 字典中的新设置获取更新的数据。

因此,并发症会在短时间内连续更新两次 - 一次是由 WatchOS 调用了 requestedUpdateDidBegin,它只是使用现有(陈旧)数据重新更新并发症,然后我很快从网络接收到新数据然后必须更新它们再次在我自己的代码中。

这似乎没有必要并且浪费资源,更不用说 Apple 允许的有限更新预算(据说每小时 2 次)。

我在这里做错什么了吗?在我有机会从网络获取新数据之前,如何防止 watchOS2 调用 requestedUpdateDidBegin?

0 投票
1 回答
524 浏览

ios - Apple Watch - 如何安排并发症更新以与推送通知同步?

我正在编写一个会议应用程序,参与者可以在其中查看会谈日程、时间和房间号。用户选择他们感兴趣的谈话。手表应用程序将用户的下一个即将到来的谈话显示为并发症。

如果演讲延迟或房间发生变化,我们将向所有与会者发送该演讲的推送通知。该应用程序还会定期(每 30 分钟)更新并发症 如果用户在她的应用程序或手表上选择推送通知,则并发症会得到更新。

此设置有一个用例不会跳动:如果在手机或应用程序上收到推送通知,并且用户在推送中看到房间时间更改但没有选择推送,那么推送上的消息将是与并发症不同步。

例如: 并发症显示: 1:15p Rm 1F 并发症计划以 30 分钟间隔更新。推送在下午 1 点 10 分出现,“您的下一个事件‘全球变暖’被延迟到下午 1 点 45 分”,但用户没有选择它。复杂功能将在下午 1:15 至下午 1:30 继续显示

有什么办法可以避免这种情况?

0 投票
1 回答
824 浏览

swift2 - watchOS 2 图像并发症

所以我试图让我的 watchOS 2 复杂功能显示图像。研究让我找到了这些链接:

https://www.bignerdranch.com/blog/watchkit-2-complications/ http://techotopia.com/index.php/A_watchOS_2_Complication_Tutorial https://developer.apple.com/library/prerelease/watchos/documentation/ClockKit /Reference/CLKImageProvider_class/index.html#//apple_ref/occ/cl/CLKImageProvider https://forums.developer.apple.com/thread/7426

我已经尝试使用图像资产来解决复杂问题,以及仅将单个图像导入项目中。我加载图像的代码如下:

但这只会导致这个图像:

watchOS 2 并发症

我要加载的图像是:

标识

我尝试了彩色图像和单色图像,但总是得到相同的结果。

0 投票
1 回答
245 浏览

ios - SendMessage 复杂控制器唤醒 iOS 应用程序

因此,当我的 Watchkit 并发症调用requestUpdateDidBegin () 以使用sendMessage () 唤醒我的 iOS 应用程序并使其计算并发症数据并使用transferCurrentComplicationUserInfo () 更新并发症时,我试图使用这个机会。我从扩展委托调用sendMessage ()。实际到达 iOS 应用程序时,我的运气好坏参半。即使将我的 iPhone 放在手表旁边,性能也会有所不同。有一次我在手机上构建了我的应用程序,它通过sendMessage () 和transferCurrentComplicationUserInfo成功地为我的复杂功能提供了 30 多次更新(),在两天的时间里。然后我使用手表应用程序从手表上卸载了该应用程序,然后从手表应用程序重新安装它(所以绝对没有代码或构建更改)并且它停止工作!我怀疑调用sendMessage ()显然存在一些错误和不可靠性。有没有其他人发现这个,有什么解决方法吗?当复杂控制器调用requestUpdateDidBegin ()时,如何唤醒我的 iPhone 应用程序?

0 投票
1 回答
144 浏览

prediction - 编写可预测未来值并显示时间敏感数据的 Apple Watch 复杂功能

我正在为 WatchOS 2 编写 Apple Watch 复杂功能。我尝试显示的特定数据(通过网络请求)以 3-6 分钟的时间间隔给出。我有一个预测算法,可以预测数据值的样子。这给我带来了一个问题。

因为我想显示我的预测算法在时间旅行中必须提供的数据,所以我想使用 getTimelineEntriesForComplication(在特定日期之后要求数据的版本)来提供我的算法认为对时间线正确的未来值. 然而,当时间向前移动(正如它倾向于做的那样)并且我们到达这些预测数据点之一被设置为发生的时间时,预测值不再准确。

例如,假设现在是下午 12:00,我目前有一个(准确的)数据值 A。预测算法可能会预测接下来两个小时的以下数据值:

  • 下午 12:30 | 乙
  • 下午 1:00 | C
  • 下午 1:30 | D
  • 下午 2:00 | 乙

但是,当 12:30 PM 实际到来时,实际数据值可能是 F。此外,该算法将生成一组新的预测,一直到下午 2:30。我知道我可以用它updateTimelineForComplication来表示必须重建时间线,但是这种方法有两个问题:

  1. 我担心我会很快超过执行时间限制
  2. updateTimelineForComplication刷新整个时间线,考虑到所有过去的数据都是完全有效的,这对我来说似乎很浪费,它只是接下来需要更新的 4 个左右的值。

有没有更好的方法来处理这个问题?

0 投票
1 回答
701 浏览

ios - requestedUpdateDidBegin 只调用了一次

我认为下面的代码会每 5 分钟请求一次新数据,但模拟器上没有更新。

我需要一些项目设置吗?

我已经使用 Xcode 7.1.1 和 7.2 Beta 4 对其进行了测试

0 投票
1 回答
1383 浏览

swift - 并发症不会更新

我有一个非常简单的随机数并发症。但是我的号码不会更新。每次看手表都是一样的。只有当我重新安装复杂功能(重新安装苹果手表应用程序)时,我才会得到一个新号码。

我已将更新设置为 1 秒。有人知道可能出了什么问题吗?

0 投票
2 回答
750 浏览

ios - 自定义时复杂功能会冻结 Apple Watch

我正在尝试为 watchOS2 制造复杂性。我为我的 iOS 应用程序创建了新目标 - 使用 Glances and Complications 我只想拥有一个模块化大型复杂功能。

当我尝试设置并发症时手表冻结(在模拟器和真实手表上)

这是我的复杂代码:

}

CLKComplicationTimeTravelDirectionNone作为支持的时间旅行方向通过

我很无助,因为我在控制台和模拟器中看不到任何错误,或者设备只是冻结了。

从 Carousel 崩溃报告中,我能够阅读以下信息:

*** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“需要应用程序。bundleID:ql.ManaEU.watchkitapp appToReplace:代理:ql.ManaEU.watchkitapp <(null) Not found in database >' 以未捕获的 NSException abort() 类型异常终止,称为 CoreSimulator 191.4 - 设备:Apple Watch - 42mm - 运行时:watchOS 2.0 (13S343) - 设备类型:Apple Watch - 42 毫米