使用ASIHTTPRequest将NSData存储在应用程序构建路径中



我正在使用ASIHTTPRequest下载要在MKMapView中使用的瓦片。测试它将我下载的任何内容下载到NSData变量中的代码。(我的文件平均为50mb)请注意,这与这个未回答的问题基本相同。

我发现我可以直接从我的网络服务器将文件下载到一个文件中,例如:

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDownloadDestinationPath:@"/Users/ben/Desktop/my_file.txt"];

对于mapview,我需要一个名为Tiles的文件夹中的文件,该文件夹位于我的应用程序构建中。它最终在这个目录中:

/var/mobile/Applications/887F4691-3B75-448F-9384-31EBF4E3B63E/MyApp.app/Tiles

我打电话给时发现的

NSLog(@"%@",[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Tiles"]);

所以我现在要做的是下载这些文件(注意复数),并将它们放在Tiles文件夹中。首先,我可以将这些图像压缩在一起,稍后在我的设备上提取并放在Tiles文件夹中,也可以继续单独下载所有图像(这似乎更容易,因为我已经知道所有文件名)

我尝试了这段代码,但它给了我一个错误。就在我加载平铺之前,它在我的地图视图的viewDidLoad请注意,它只是用来测试下载代码的,稍后会放在其他地方由按钮触发

这是代码:

NSURL *url = [NSURL URLWithString:@"http://...my-website.../25.png"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDownloadDestinationPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Tiles"]]; // THE PROBLEMATIC LINE
[request startSynchronous];
NSError *error = [request error];
if(!error)
{
    NSLog(@"Loaded Map");
}
else
{
    NSLog(@"Error occured while loading map");
    NSLog(@"%@",error);
}

这出现在控制台上:

2011-06-26 21:12:09.651 MyApp[5309:707] Error occured while loading map
2011-06-26 21:12:09.669 MyApp[5309:707] Error Domain=ASIHTTPRequestErrorDomain Code=8 "Failed to delete file at path '/var/mobile/Applications/887F4691-3B75-448F-9384-31EBF4E3B63E/MyApp.app/Tiles'" UserInfo=0x184b20 {NSUnderlyingError=0x1d4ac0 "The operation couldn’t be completed. (Cocoa error 513.)", NSLocalizedDescription=Failed to delete file at path '/var/mobile/Applications/887F4691-3B75-448F-9384-31EBF4E3B63E/MyApp.app/Tiles'}

那么,如何将下载的文件存储在iPhone上的目录中,以便以后查找和使用

谢谢你的麻烦。

您不能直接写入应用程序包。您应该在应用程序的沙盒中使用一个目录,例如/Documents或/Library/Caches。请参阅获取标准应用程序目录的路径,了解如何获取这些路径。

相关内容

最新更新