У меня есть длительное фоновое задание по поиску похожих изображений в устройстве. Я реализовал код с очередью операций и назначил его QoS для фона. Иногда он работает отлично, а иногда нет.
photoScanningOperationQueue.name = "photo_scanning"
photoScanningOperationQueue.maxConcurrentOperationCount = 1
photoScanningOperationQueue.qualityOfService = .background
photoScanningOperationQueue.underlyingQueue = .global(qos: .background)
В симуляторе он не приостанавливает приложение полностью, он просто останавливает процесс и выдает эту ошибку, но в реальном устройстве он просто останавливает приложениеи при запуске из запуска при загрузке из фона.
assertion's invalidation time is in the past
Я использовал приведенный ниже код для выполнения долгосрочной фоновой задачи
extension DuplicatePhotoFinderVC {
func setupBackgrounding() {
NotificationCenter.default.removeObserver(self, name: UIApplication.didEnterBackgroundNotification, object: nil)
NotificationCenter.default.removeObserver(self, name: UIApplication.willEnterForegroundNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(appBackgrounding(_:)), name: UIApplication.didEnterBackgroundNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(appForegrounding(_:)), name: UIApplication.willEnterForegroundNotification, object: nil)
}
@objc func appBackgrounding(_ notification: Notification?) {
keepAlive()
}
@objc func keepAlive() {
timer?.invalidate()
timer = nil
backgroundTask = UIApplication.shared.beginBackgroundTask(expirationHandler: {
UIApplication.shared.endBackgroundTask(self.backgroundTask)
self.backgroundTask = UIBackgroundTaskIdentifier.invalid
if self.photoScanningOperationQueue.operationCount > 0 {
self.keepAlive()
}
})
}
}
В методе viewDidLoadЯ вызвал setupBackgrounding (). Я не уверен, что вызывает эту проблему. Я пытался отладить в течение 2 дней, и я не могу найти основную причину или решение моей проблемы. Если вы сможете определить проблему и дать решение, она будет очень признательна.