后台任务在 Swift 中与 CloudKit 一起工作吗?

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

我正在尝试向我的应用程序添加后台任务,一切似乎都在使用以下代码注册和安排任务进行注册。

    static func registerTask() {
        BGTaskScheduler.shared.register(forTaskWithIdentifier: taskIdentifier, using: nil) { task in
            task.expirationHandler = {
                task.setTaskCompleted(success: false)
            }

            // Do things here 

            task.setTaskCompleted(success: true)
        }
    }

这个要安排:

    static func scheduleTask() {
        let request = BGAppRefreshTaskRequest(identifier: taskIdentifier)
        request.earliestBeginDate = .now.addingTimeInterval(30)
        
            try? BGTaskScheduler.shared.submit(request)        
    }

问题是在我的日程安排功能运行并且应用程序进入后台后,我收到以下类型的错误:


[BackgroundTask] 后台任务 61(“CoreData:CloudKit 导入”)创建于 30 多秒前。在后台运行的应用程序中,这会产生终止风险。记得及时为你的任务调用 UIApplication.endBackgroundTask(_:) 来避免这种情况。

[tcp] tcp_output [C1.1.1.1:3] flags=[R.] seq=1263069135, ack=3409229275, win=2046 state=CLOSED rcv_nxt=3409229275, snd_una=1263069058 2023-04-06 17:58:23.217898-0700 MyApp[14099:4978381] [error] 错误:意外的后台任务断言取消。

[BackgroundTask] 调用到期处理程序后后台任务仍未结束:<UIBackgroundTaskInfo: 0x2805ac580>: taskID = 61, taskName = CoreData: CloudKit Import, creationTime = 508235 (elapsed = 76)。此应用程序可能会被系统终止。调用 UIApplication.endBackgroundTask(:) 来避免这种情况。


我不明白为什么会这样,因为我的后台任务与应用程序中的任何 CoreData 或 CloudKit 无关,我用它来创建通知。

使用 Xcode 标志手动触发任务工作正常,但似乎每次后台任务试图自行触发时,CloudKit 都有一些问题。

这也是我唯一的后台任务,而且与 CoreData 或 Cloudkit 无关。

有没有其他人遇到过类似的事情,或者如果你使用 CloudKit 和后台任务,一切正常吗?

谢谢。

swift core-data cloudkit
1个回答
0
投票

错误与您的代码无关。
终止的后台任务是 CoreData 和 CloudKit 同步之一,在您的情况下是从 iCloud 导入,应该与 CoreData 持久存储同步。
我在手表上看到过这种错误,当然比 iPhone 慢得多。
只要你的应用程序没有真正终止,你就应该忘记这个警告。如果它被终止,我敢建议写一个错误报告(我的几乎从未被处理或回答......)。

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