iOS单独下载每个文件或在一个存档中下载

iOS单独下载每个文件或在一个存档中下载,ios,download,Ios,Download,我正在开发一个iOS应用程序,在这个应用程序中,我需要定期向设备“推送”新的级别。级别是一个HTML5页面,包含图像、javascript和css文件。我需要在本地缓存所有关卡的文件,然后用户才能播放关卡。每个级别大约为1.5MB。我正在考虑将包含HTML、图像、css和js的整个级别的文件夹归档到一个zip归档中,下载这个zip,然后在设备上取消归档。但也许单独下载每个文件更有效,因为它们可以同时下载 这是我的第一个iOS应用程序,我真的不知道如何正确使用它。所以问题是:从服务器下载一个完整文

我正在开发一个iOS应用程序,在这个应用程序中,我需要定期向设备“推送”新的级别。级别是一个HTML5页面,包含图像、javascript和css文件。我需要在本地缓存所有关卡的文件,然后用户才能播放关卡。每个级别大约为1.5MB。我正在考虑将包含HTML、图像、css和js的整个级别的文件夹归档到一个zip归档中,下载这个zip,然后在设备上取消归档。但也许单独下载每个文件更有效,因为它们可以同时下载


这是我的第一个iOS应用程序,我真的不知道如何正确使用它。所以问题是:从服务器下载一个完整文件夹的最佳方法是什么,然后在下载所有文件时触发回调(记住用户可以关闭应用程序或者在下载过程中丢失连接)?

,因为大多数用户实际上是在慢速3G连接上,压缩存档下载速度会快得多(对他们来说也更便宜),而且可能会使他们的连接完全饱和。同时这样做只会使所有传输变慢,因为它们被迫共享相同的有限连接。一次完成也可以避免与文件传输失败等众多传输之一相关的头痛问题。

我发现压缩实际上比较慢,因为设备解压的时间与下载的时间一样长。如前所述,查看ASIHTTPRequest使用此选项可以说“获取页面及其所有资源”

更多文档可在此处找到

在这里


这本书读起来很容易

这是正确的答案。此外,考虑使用ASIHTPREQUEST为您的请求,如果你想更先进的特点/易用性。我决定选择这种方法(而不是下面的答案),因为下载后,我想把所有文件分开存储,以便我可以单独更新它们。谢谢你的建议!恩迪,谢谢你的建议。我听说ASIHTTPRequest不再维护,并且它在ios5上有一些问题。您知道这方面的情况吗?AsiTRequest确实不再维护,但是,我从来没有遇到过任何重大问题,并且我已经大量使用它(所有网络连接都依赖它)大约7-8个月了。在不太可能的情况下,您确实遇到了问题,所有文件实际上都很容易阅读和理解。
- (IBAction)downloadLevel:(NSURL *)levelURL
{
    // Assume request is a property of our controller
    // First, we'll cancel any in-progress page load
    [self.request setDelegate:nil];
    [self.request cancel];

    [self setRequest:[ASIWebPageRequest requestWithURL:levelURL]];
    [self.request setCompletionBlock:^{
        //code in here runs when the request finishes
    }];

    [self.request setFailedBlock:^{
        //code in here runs when the request fails
    }];

    // Tell the request to embed external resources directly in the page
    [self.request setUrlReplacementMode:ASIReplaceExternalResourcesWithData];

    // It is strongly recommended you use a download cache with ASIWebPageRequest
    // When using a cache, external resources are automatically stored in the cache
    // and can be pulled from the cache on subsequent page loads
    [self.request setDownloadCache:[ASIDownloadCache sharedCache]];

    // Ask the download cache for a place to store the cached data
    // This is the most efficient way for an ASIWebPageRequest to store a web page
    [self.request setDownloadDestinationPath:
     [[ASIDownloadCache sharedCache] pathToStoreCachedResponseDataForRequest:self.request]];

    [self.request startAsynchronous];
}