我的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)
调用时,我传递了一个释放的对象。
有什么建议吗?
HealthController().updateComplicationData
造成的负担吗?感谢您的帮助!
答案 0 :(得分:-1)
我终于解决了这个问题,以防其他任何人遇到它!基本上,我在后台刷新时有一个奇怪的代码路径,偶尔不调用finishBackgroundUpdate处理程序。因此,WatchKit正在杀死该应用程序。现在一切都解决了。