我有一个iOS应用,需要在首次安装时将大量数据从云同步到设备,如果用户想要离线访问所有内容,甚至可能需要2GB。不说“改变你的设计”,如何在没有用户太多交互的情况下确保初始同步完成?
目前,只要他们将我的应用程序保留在前台并且不让设备进入睡眠状态,它就会完成。我想允许他们使用其他应用程序或在此过程中关闭屏幕,因为这是一件非常无聊的事情。
我见过application:performFetchWithCompletionHandler:和 beginBackgroundTaskWithName:expirationHandler,但他们只允许很短的时间(大约30秒)来完成任务。是否有更好的东西,或者我是否需要每隔~25秒停止同步使我的设计复杂化,然后下次我通过操作系统给予更多时间恢复?
我的应用程序就像Microsoft Outlook,它有电子邮件(在某些情况下是数百万),联系人,日历和其他几个方面。我有不同的同步选项来限制数据量,但有些用户希望脱机访问所有内容(是的,甚至是10年前的电子邮件和附件)。我认为它们很愚蠢,但不能与最终用户争论。
答案 0 :(得分:0)
我知道这是一个非常古老的问题,但我建议你使用NSURLSession在后台下载数据,即使你的应用没有运行。
您只需创建一个NSURLSession,它使用Background NSURLSessionConfiguration(使用NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier :)并为您需要下载的每个请求创建一个NSURLSessionDownloadTask。
即使你的应用程序根本没有运行,NSURLSession也会下载数据,它会将数据保存为应用程序沙箱中的文件。实现NSURLSession委托方法以接收下载完成的通知,读取下载的文件并将其保存为您认为合适的方式。
您应该查看Using NSURLSession上的Apple指南。