Как мне взять изображение с сайта и сохранить его в NSDocumentDirectory - PullRequest
0 голосов
/ 25 февраля 2010

Я пытаюсь создать приложение для снятия фотографий с веб-сайта и сохранения их в NSDocumentDirectory для дальнейшего использования. Пока что я потерпел неудачу в своих попытках, и мне интересно, как это сделать.

Не нужно больше объяснений, но вот несколько моих (неудачных) попыток:
Один:

NSString *path = @"http://miniwidgit.webs.com/TabRight2.png";
NSFileManager *fmgr = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fileName = [[NSString alloc] initWithFormat:@"%@/File.jpg", documentsDirectory];
NSLog(fileName);
NSError *err;
if ([fmgr copyItemAtPath:path toPath:fileName error:&err]) 
{} 
else 
{
    NSLog([NSString stringWithFormat:@"%@%@.", @"There was an error. The error was: ", err]);
}

Два:

NSURL *path = [NSURL URLWithString:@"http://miniwidgit.webs.com/TabRight2.png"];
NSFileManager *fmgr = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fileName = [[NSString alloc] initWithFormat:@"%@/File.jpg", documentsDirectory];
NSLog(fileName);
NSError *err;
NSString *image = [[NSString alloc] initWithContentsOfURL:path];
[image writeToFile:fileName atomically:NO encoding:NSStringEncodingConversionExternalRepresentation error:&err];
NSLog([NSString stringWithFormat:@"%@%@.", @"There was an error. The error was: ", err]);

На одном я получил ошибку:

Ошибка домена = NSPOSIXErrorDomain Code = 2 UserInfo = 0x3b171b0 "Операция не может быть завершено. Нет такого файла или каталога, "

но это не имеет смысла, потому что изображение (на моем сайте) существует.

На двух я получил ошибку:

Ошибка домена = NSCocoaErrorDomain Code = 517 UserInfo = 0x3b33090 "Операция не может быть завершено. (Ошибка какао 517.) "

1 Ответ

4 голосов
/ 25 февраля 2010

Это не путь к файлу - это URL для HTTP-ресурса. Вам необходимо использовать один из API загрузки URL (например, NSURLDownload), чтобы загрузить изображение.

С кодом, который у вас есть в № 1, он ищет файл с именем "TabRight2.png", который находится в каталоге с именем "miniwidget.webs.com", который находится в каталоге с именем "http:" в текущем каталоге - и, конечно, не найти его.

Со вторым вы пытаетесь загрузить изображение в строку NSString. Трудно сказать, какая именно ошибка в этом случае, но это нецелесообразно и может быть виновником. Строки NSS предназначены для текста, и изображения могут содержать последовательности, которые недопустимы как текст в любой кодировке. Вы должны использовать NSData для хранения двоичных данных, а не NSString.

...