iOS7后台同步(使用NSURLSessionDataTask?)

场景:

作为用户,我可以拍摄(无限量)照片和视频,这些照片和视频存储在apps文档文件夹中.这些媒体文件中的每一个都在sqlite数据库获取具有附加信息的记录(例如,标题).所有这些都可以完全脱机完成.

重新上线后,我会看到一个对话框,其中列出了我拍摄的所有视频和照片以及一个启动上传过程的按钮.

通过向服务器发出多部分POST请求,将每个文件与其元数据一起上载到另一个文件之后.服务器的响应与元数据一起存储在sqlite数据库中(因此没有火灾和遗忘).

可靠的解决方案?

如果我正在阅读并正确理解this chart,最简单的解决方案是将每个上传内容包装在一个任务中.副作用:10分钟后,每个任务都将被取消,这会因连接速度慢或文件非常大(例如视频很长)而成为问题.

推荐的方法是使用NSUrlSession /后台传输服务.

这引出了我的问题:

是否可以在NSURLSessionDataTasks中包装多部分POST并且这是否可靠,即使任务运行时间超过10分钟或用户暂停应用程序?

因为我是一个Xamarin / C#家伙,所以我非常感谢一些工作分段上传的样本片段,即使它是在Objective-C中;-).

解决方法

差不多……是的.

后台传输服务仅适用于NSUrlSessionDownloadTasks和NSUrlSessionUploadTasks.不是NSUrlSessionDataTasks,如here所述.

除了这个“基本”限制之外,使用后台传输服务和上传任务是安全的.

10分钟的免费通行证不再适用于iOS 7(基本上,它在那里,但不同),但是,使用NSURLSession和后台传输服务,你不需要它.

我有一篇基于下载任务的背景传输服务here博客文章.

需要注意的一点是,启动任务基本上意味着它实际上会在某个时间启动并实际完成其他时间.这取决于设备是处于蜂窝网络还是Wi-Fi以及其他(可能)仅为iOS(和Apple)所知的因素.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...