Swift 2.0:安排后台任务上传失败的产品
Swift 2.0: Schedule background task to upload failed product uploads
我正在开发一个将产品 (JSON) 上传到服务器的应用程序。现在,每个产品对象都包含许多图像。如果与该产品关联的所有图像都已上传,则该产品仅上传到服务器。如果产品的所有图片都没有上传,产品应该以 'PENDING' 状态存储在移动数据库中(我使用的是 Realm)。
我想要一个后台任务来定期(每 15 分钟)检查数据库中是否有此类失败的产品上传,检查是否所有与产品关联的图像现在都已上传并将产品排队等待上传到服务器。
此后台任务仅在应用 运行 时执行,否则不会执行。该任务应在启动时启动并在应用程序关闭时终止。
我找到了一些相关的解决方案(与 iOS 中的 NSTimer 和后台模式等相关),但没有直接解决我的问题。请指引我正确的方向!谢谢!
当您需要在应用未运行时执行后台任务时,后台模式很有用 运行,这不是您想要的。 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
}
我正在开发一个将产品 (JSON) 上传到服务器的应用程序。现在,每个产品对象都包含许多图像。如果与该产品关联的所有图像都已上传,则该产品仅上传到服务器。如果产品的所有图片都没有上传,产品应该以 'PENDING' 状态存储在移动数据库中(我使用的是 Realm)。
我想要一个后台任务来定期(每 15 分钟)检查数据库中是否有此类失败的产品上传,检查是否所有与产品关联的图像现在都已上传并将产品排队等待上传到服务器。
此后台任务仅在应用 运行 时执行,否则不会执行。该任务应在启动时启动并在应用程序关闭时终止。
我找到了一些相关的解决方案(与 iOS 中的 NSTimer 和后台模式等相关),但没有直接解决我的问题。请指引我正确的方向!谢谢!
当您需要在应用未运行时执行后台任务时,后台模式很有用 运行,这不是您想要的。 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
}