关于制作必须下载和显示pdf的应用程序的最佳方法,我遇到了问题,它由一个JSON提供,该JSON链接到147个pdf文件,大小介于1到2 MB之间。
问题:
将所有文件下载到iPad的最佳方法是什么?
我应该使用AFNetworking 2.0吗?
NSFileManager是保存所有文件的方式吗?
我可能遇到的问题:
通过异步下载,如果连接丢失或iPad上没有更多空间,那么反击是什么?
是否有处理这种情况的教程或示例?
对不起所有问题,但我是新来的。 最诚挚的问候。
答案 0 :(得分:1)
将所有文件下载到iPad的最佳方法是什么?
正如@rmaddy建议的那样,这非常广泛。具体问题更容易回答。有很多方法可以通过HTTP请求将文件下载到您的设备,每个方面都有优点/缺点,具体取决于您的情况。
我应该使用AFNetworking 2.0吗?
不确定。你不会得到我的任何争论。这是一个广泛使用且可靠的API,用于与基于HTTP的资源进行交互。
NSFileManager是保存所有文件的方式吗?
是。 NSFileManager
是您用来从应用程序的沙箱读取/写入文件的类。
通过异步下载,如果连接丢失或iPad上没有更多空间,有哪些对策?
我不是100%肯定所以我无法确切地说出在这种情况下会发生什么。 AFNetworking可以通过在下载等期间写入临时文件来提供一些帮助....
是否有处理这种情况的教程或示例?
我在Github上有一个示例项目,它显示了一个可以下载的文件表。您可以查看下载进度,暂停每个请求,恢复和取消。完成后,您可以查看下载的文件。它使用AFNetworking,可能对您有用:
答案 1 :(得分:1)
下载大文件时,主要建议是在下载时避免尝试将这些文件加载到内存中。相反,请确保将它们直接流式传输到持久存储。在处理特定于空间的错误方面,只需确保检查完成处理程序中返回给您的NSError
个对象或相应的委托方法。
如果使用AFNetworking,您可以指定outputStream
的{{1}}来引用您创建的AFURLConnectionOperation
,引用持久存储中的某个路径。
例如,请参阅Memory pressure issue while downloading multiple files using AFNetworking。
或者,你可以使用NSOutputStream
(无论是通过AFNetworking还是自己动手)并实例化一个NSURLSession
,它会做同样的事情。
Google" NSURLSessionDownloadTask示例"你会发现大量的参考资料。基于块的NSURLSessionDownloadTask
再现非常简单。要进行后台下载有点复杂,需要基于委托的实现(请参阅{em>下载文件和处理iOS背景活动部分URL Loading System Programming Guide: Using NSURLSession或观看{{ 3}})。
无论哪种方式,您都可以避免与下载大文件相关的一些内存消耗挑战。