Сохранение NSData в пути сборки приложения с помощью ASIHTTPRequest

Я использую ASIHTTPRequest для загрузки фрагментов, которые будут использоваться в моем MKMapView. Тестируя код, он загружает все, что я загружаю, в переменную NSData. (Мои файлы в среднем 50 МБ) Обратите внимание, что это почти то же самое, что this неотвеченный вопрос.

Я обнаружил, что могу напрямую загрузить файл со своего веб-сервера в файл, например:

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

Для просмотра карты мне нужны файлы в папке с именем 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, где я смогу найти и использовать его позже?

Спасибо за беспокойство.


person LouwHopley    schedule 26.06.2011    source источник


Ответы (1)


Вы не можете писать напрямую в пакет приложений. Вы должны использовать каталог внутри песочницы вашего приложения, например / Documents или / Library / Caches. См. Получение путей к стандартным каталогам приложений, чтобы узнать, как получить эти пути.

person jtbandes    schedule 26.06.2011
comment
Сладкое спасибо. Все мои усилия и вы решите проблему в одном абзаце! хаха спасибо! - person LouwHopley; 27.06.2011