Swift 2.0: планирование фоновой задачи для загрузки неудачных загрузок продукта
Я разрабатываю приложение, которое загружает продукт (JSON) на сервер. Теперь каждый объект продукта состоит из множества изображений. Продукт загружается на сервер, только если все изображения, связанные с этим продуктом, уже загружены. Если все изображения для продукта не были загружены, продукт должен быть сохранен в состоянии "В ОЖИДАНИИ" в мобильной базе данных (я использую Realm).
Я хочу, чтобы фоновая задача периодически (каждые 15 минут) проверяла базу данных на предмет таких неудачных загрузок продукта, проверяла, все ли изображения, связанные с продуктом, уже загружены, и ставит в очередь продукт для загрузки на сервер.
Эта фоновая задача будет выполняться ТОЛЬКО во время работы приложения, а не иначе. Задача должна быть запущена при загрузке и убита при закрытии приложения.
Я нашел некоторые подходящие решения (касающиеся NSTimer и фоновых режимов в iOS и т. Д.), Но ничего не решает мою проблему напрямую. Пожалуйста, направьте меня в правильном направлении! Спасибо!
1 ответ
Фоновые режимы полезны, когда вам нужно, чтобы фоновые задачи выполнялись, когда приложение не запущено, поэтому это не то, что вам нужно. NSTimer может выполнить работу здесь, и вам нужно запланировать ее после того, как приложение станет активным в делегате приложения и сделать недействительным сразу после того, как приложение войдет в фоновый режим. Простой пример может выглядеть так:
var timer:NSTimer!
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
timer = NSTimer.scheduledTimerWithTimeInterval(60 * 15, target: self, selector: "uploadData", userInfo: nil, repeats: true)
return true
}
func applicationDidEnterBackground(application: UIApplication) {
timer.invalidate()
}
func applicationWillEnterForeground(application: UIApplication) {
timer = NSTimer.scheduledTimerWithTimeInterval(60 * 15, target: self, selector: "uploadData", userInfo: nil, repeats: true)
}
func uploadData(){
// Query unsychronzied data and send them to server here
}