Вы делаете свою операцию в закрывающем закрытии, которое используется для очистки. И еще, что вы заканчиваете фоновое задание, как только оно начинается, так что ваше закрытие никогда не вызовет.
Вот рабочий пример работы фоновой задачи
var backgroundTaskIdentifier:UIBackgroundTaskIdentifier = UIBackgroundTaskInvalid
var updateTimer: Timer?
Теперь, когда вы запускаете свою операцию для примера запуска таймера
updateTimer = Timer.scheduledTimer(timeInterval: 0.5, target: self,
selector: #selector(calculateNextNumber), userInfo: nil, repeats: true)
// register background task
beginBackgroundTask()
и когда вы заканчиваете конец таймера фоновой задачей; всегда должен заканчивать фоновые задачи
func beginBackgroundTask () {
backgroundTaskIdentifier = UIApplication.shared.beginBackgroundTask(expirationHandler: { [weak self] in
self?.endBackgroundTask() // It will call to cleanup
})
assert(backgroundTaskIdentifier != UIBackgroundTaskInvalid)
}
func endBackgroundTask () {
UIApplication.shared.endBackgroundTask(backgroundTaskIdentifier)
backgroundTaskIdentifier = UIBackgroundTaskInvalid
}
Итак, в вашем случае
- Зарегистрируйтесь для фоновой задачи
- Запросить свою базу данных (выполнить все операции)
- Когда вы закончите фоновое задание завершения вызова
Примечание. Также обратите внимание на ограничение времени, заданное яблоком для выполнения фоновой задачи
РЕДАКТИРОВАТЬ
Удостоверьтесь, что вы включили возможности фона, используя параметры проекта
Попробуйте
beginBackgroundTask()
let watchModel = WatchCourseModel()
let courses = watchModel.getWatchCourses()
print("Courses: (courses)")
foundCourses.append(contentsOf: courses)
endBackgroundTask()