Swift 2.0:安排后台任务以上载失败的产品上载

Swift 2.0:安排后台任务以上载失败的产品上载,swift,ios8,swift2,nstimer,dispatch-async,Swift,Ios8,Swift2,Nstimer,Dispatch Async,我正在开发一个将产品(JSON)上传到服务器的应用程序。现在,每个产品对象都由许多图像组成。只有当与产品关联的所有图像都已上载时,才会将产品上载到服务器。如果该产品的所有图像尚未上传,则该产品应以“挂起”状态存储在移动数据库中(我使用的是Realm) 我希望有一个后台任务定期(每15分钟)检查数据库中是否有此类失败的产品上载,检查与产品相关的所有图像是否已上载,并将产品排队以上载到服务器 此后台任务仅在应用程序运行时执行,否则不会执行。该任务应在启动时启动,并在应用程序关闭时终止 我找到了一些相

我正在开发一个将产品(JSON)上传到服务器的应用程序。现在,每个产品对象都由许多图像组成。只有当与产品关联的所有图像都已上载时,才会将产品上载到服务器。如果该产品的所有图像尚未上传,则该产品应以“挂起”状态存储在移动数据库中(我使用的是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
}

棒极了,兄弟!正是我要找的!谢谢不过我关心的是表演。这样的计时器会对性能产生负面影响吗?我不这么认为。如果选择器在15分钟内被调用一次,它根本不会影响应用程序的性能(假设它只执行一次简单的携带)。此外,上传过程将在后台线程上执行,因此不必担心性能