在iOS应用程序中创建持久性任务队列的最佳做法是什么?

Rob*_*Mao 9 iphone core-data grand-central-dispatch ios

我正在使用调度队列来管理一系列后台任务(根据用户的需求下载多个文件,而无需在UI中等待),到目前为止它工作得很好.更重要的是,我需要执行未完成的任务,例如,如果没有网络可达性,或应用程序崩溃,或手机电池耗尽,下次应用程序运行时,所有任务将自动恢复.

我打算让每个任务块在核心数据上下文中保存任务,并在任务完成后将其删除,并且我还需要在应用程序启动时执行检查,看看是否有任务要做.

创建此类应用程序的最佳做法是什么?是否有可以重复使用的示例,教程或库?

Mug*_*nth 4

你的技术应该很管用。设计管理后台任务的类以“盲目”执行分配给它的任何任务。

从各种视图控制器向此类提交任务。提交方法应该类似于

-(void) submitTask:(MyTask*) task  {

  task.completionHandler = ^{ [self.runningTasks removeObject:task];}
  [self.taskQueue addOperation: task];      
}
Run Code Online (Sandbox Code Playgroud)

我假设 MyTask 是 NSOperation 的子类,taskQueue 是 NSOperationQueue。runningTasks 只是一个 NSMutableArray,当您收到 UIApplicationDidEnterBackgroundNotification 时,它会序列化到磁盘(CoreData 或您喜欢的任何格式)。

您也可以使用 GCD 实现类似的设计。