watchOS并发症–重新加载的费用超过每日预算?

问题描述 投票:0回答:2

我正在开发graphicRectangular类型的watchOS Complication。诸如苹果活动或心率并发症。这些更新通常会显示一些图形数据。

我的图表有效–在时间轴上显示日历事件。

我无法“每分钟”更新。在时间线图中为实际时间设置标记(检查屏幕截图)会很好。但是这个想法大部分都消失了,因为我每天只能强制更新时间轴50次(如我所读)。苹果只是说

如果您的并发症已超出其分配的每日预算,对于执行时间,对此方法的调用无效。

所以我无能为力,对吗?即使我的目标不是将其提交到AppStore并进行审查?

enter image description here

现在,我已经开发了一个功能,用于检查文本是否需要更新(在13:00 Lorem Ipsum上方的屏幕截图中)或图形已更改,并且是否触发了reloadTimeline()方法。因此,不仅是每次都重新加载它,而且仅在必要时才重新加载它。但是我应该怎么称呼这个功能呢?我已经在后台Task中尝试过了,但是只检查“何时需要” –我还在ExtensionDelegate中构建了一个可重复的30秒计时器。这也可行–但似乎仅在XCode运行应用程序时有效–如果我停止在XCode中运行,则图表几乎每15分钟或仅更新一次(可能有后台Task)。

[我也为storeChanged()提供了EventKit观察器。因此,如果日历中发生了某些更改,我可以重新加载图表。在XCode处于活动状态运行应用程序时,这也可以很好地工作并快速引用。停止应用程序并在“ XCode外部”的手表上使用它似乎有很大的延迟-有时它永远无法工作。

[打开应用程序(轻按并发症)时,storeChanged()事件立即被触发(我认为这是此功能–由于连接到XCode的每个操作都非常快,因此我无法真正调试),并且在关闭应用程序后,并发症得到刷​​新。


[为什么有原因导致storeChanged()事件以超快的速度被触发,然后通过XCode运行,但是非常缓慢/缓慢/仅在不通过XCode的运行中打开应用程序时才触发?

不通过XCode运行时为什么我的计时器不运行?使用XCode运行时,我可以从这些定时的30秒“检查”中看到控制台中的调试打印。但是,在XCode外部运行时,这些似乎无关紧要。只是很少更新并发症。


[另一个示例:今天早上,当我戴上手表时,仍然可以看到昨天的图表。因此后台Task或Timer不能在一夜之间工作。当打开应用程序(轻击并发症)时,图形将立即刷新。


EventKit观察器或计时器的正确位置在哪里?ExtensionDelegateComplicationController

swift watchkit watchos eventkit apple-watch-complication
2个回答
1
投票

之所以一切都在Xcode中快速运行的原因是,当将应用程序连接到调试器时,系统不会停止执行后台队列。因此,将应用程序附加到调试器将使所有后台队列保持活动状态。

要尽可能多地刷新并发症,您可以:

  • 使用并发症控制器代理
  • 后台任务处理程序
  • 每天刷新您的并发症50次(您也可以使用WatchConnectivity框架从iOS应用触发此问题)
  • 如果您的应用符合extended runtime sessions的用例,也可以尝试使用它们

很遗憾,您不能做更多的事情。当您的并发症超过Apple的限制时,就不会再刷新了。因此,最好每30分钟刷新一次。


0
投票

我使用getTimelineEndDate()getTimelineEntries(for: after date:)在初始/刷新时间产生了所有其他计划的并发症“视图”。因此,我不必为了更改“计划内容”而刷新复杂性。

我只需要刷新它即可从EventKit中获取更改。

© www.soinside.com 2019 - 2024. All rights reserved.