WKBackgroundRefreshTask在返回之前被取消分配

时间:2018-10-18 20:14:15

标签: ios swift watchkit apple-watch

我的WatchKit应用程序在WatchOS 5中崩溃时遇到了麻烦。这是在后台发生的,当我的系统调用我的应用程序让我更新并发症时。

当我得到WKApplicationBackgroundRefreshTask时,在后台调用此处的代码段:

    func handle(_ backgroundTasks: Set<WKRefreshBackgroundTask>) {
    for task in backgroundTasks {
        switch task {
        case let backgroundTask as WKApplicationRefreshBackgroundTask:
                HealthController().updateComplicationData {
                    self.updateComplications()
                    if #available(watchOSApplicationExtension 4.0, *) {
                        backgroundTask.setTaskCompletedWithSnapshot(false)
                    } else { task.setTaskCompleted()}
            }

问题是,我基本上崩溃了:

[WKRefreshBackgroundTask dealloc]

所以我知道,如果HealthController()。updateComplicationData()函数花费太长时间返回,则可能会发生这种情况。但是崩溃并不意味着该应用程序因cpu时间问题而被杀死。似乎实际的backgroundTask变量已被释放,因此在发生backgroundTask.setTaskCompletedWithSnapshot(false)调用时,我传递了一个释放的对象。

有什么建议吗?

  1. 我能以某种方式使backgroundTask变量不会被释放吗?
  2. 我是否会因为撞车原因而错了,我还缺少其他东西?
  3. 我只是被迫寻找一种方法来减轻HealthController().updateComplicationData造成的负担吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:-1)

我终于解决了这个问题,以防其他任何人遇到它!基本上,我在后台刷新时有一个奇怪的代码路径,偶尔不调用finishBackgroundUpdate处理程序。因此,WatchKit正在杀死该应用程序。现在一切都解决了。