【问题标题】:watchOS Complication – reload more than daily budget?watchOS 并发症 - 重新加载超过每日预算?
【发布时间】:2020-03-13 10:48:41
【问题描述】:

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

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

我不能“每分钟”更新它。在时间线图中为实际时间设置一个标记(检查屏幕截图)会很好。但是这个想法基本上已经消失了,因为我每天只能强制更新时间线 50 次(正如我所读到的)。苹果只是说

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

所以我无能为力,对吧?即使我的目标不是将其提交到 AppStore 并获得审核也不行?

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

我还为 storeChanged() 添加了 EventKit 观察者。因此,如果日历发生更改,我可以重新加载图表。在 XCode 处于活动状态的情况下运行应用程序时,这也很有效并且引用速度很快。停止应用程序并在“XCode 之外”的手表上使用它似乎有一个严重的延迟——有时它永远不会工作。

当打开应用程序(点击复杂功能)时,storeChanged() 事件会立即触发(我认为是这个功能——我无法真正调试它,因为连接到 XCode 的每个都运行得非常快)并且在关闭应用程序后并发症被刷新。


storeChanged() 事件被超快触发然后通过 XCode 运行但极其滞后/缓慢/仅在不通过 XCode 运行时打开应用程序时触发,是否有原因?

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


另一个例子:今天早上,当我戴上手表时,昨天的图表仍然可见。因此,后台任务或计时器无法通宵工作。打开应用程序时(点击复杂功能),图表会立即刷新。


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

【问题讨论】:

    标签: swift watchkit watchos eventkit apple-watch-complication


    【解决方案1】:

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

    计时器在主队列上运行。当应用程序附加到 Xcode 调试器时,主队列一直在运行。在没有调试器的情况下运行您的应用程序时,主队列会在应用程序进入后台时暂停。

    要尽可能频繁地刷新您的并发症,您可以:

    遗憾的是,您不能做更多的事情。当您的并发症超过 Apple 限制时,它将不再刷新。所以最好每 30 分钟刷新一次。

    【讨论】:

    • 谢谢!但哪个是 ComplicationControllerDelegate?只要有一个 ExtensionDelegate 或 ComplicationController。每天刷新 50 次就足够了——这不是主要问题。主要问题是让 backgroundTask / Timer 运行以检查并发症是否需要更新。知道为什么没有 XCode 的 Timer 不能正常工作吗?
    • 我更新了帖子,如果您还有任何问题,请告诉我
    • 我还找到了一个为未来预先规划并发症状态的解决方案。看我的回答。
    【解决方案2】:

    我使用getTimelineEndDate()getTimelineEntries(for: after date:) 在初始/刷新时生成所有其他计划的并发症“视图”。所以我不需要为了改变“计划内容”而刷新复杂性。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-08
      • 2018-09-12
      • 1970-01-01
      • 1970-01-01
      • 2022-12-09
      • 2022-11-05
      • 1970-01-01
      相关资源
      最近更新 更多