我正在开发graphicRectangular
类型的watchOS Complication。诸如苹果活动或心率并发症。这些更新通常会显示一些图形数据。
我的图表有效–在时间轴上显示日历事件。
我无法“每分钟”更新。在时间线图中为实际时间设置标记(检查屏幕截图)会很好。但是这个想法大部分都消失了,因为我每天只能强制更新时间轴50次(如我所读)。苹果只是说
如果您的并发症已超出其分配的每日预算,对于执行时间,对此方法的调用无效。
所以我无能为力,对吗?即使我的目标不是将其提交到AppStore并进行审查?
现在,我已经开发了一个功能,用于检查文本是否需要更新(在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观察器或计时器的正确位置在哪里?ExtensionDelegate
或ComplicationController
?
之所以一切都在Xcode中快速运行的原因是,当将应用程序连接到调试器时,系统不会停止执行后台队列。因此,将应用程序附加到调试器将使所有后台队列保持活动状态。
要尽可能多地刷新并发症,您可以:
很遗憾,您不能做更多的事情。当您的并发症超过Apple的限制时,就不会再刷新了。因此,最好每30分钟刷新一次。
我使用getTimelineEndDate()
和getTimelineEntries(for: after date:)
在初始/刷新时间产生了所有其他计划的并发症“视图”。因此,我不必为了更改“计划内容”而刷新复杂性。
我只需要刷新它即可从EventKit中获取更改。