Могу ли я загрузить UIImage из URL? - PullRequest
127 голосов
/ 06 мая 2010

У меня есть URL для изображения (полученный из UIImagePickerController), но у меня больше нет изображения в памяти (URL был сохранен из предыдущего запуска приложения). Могу ли я снова загрузить UIImage из URL?

Я вижу, что в UIImage есть imageWithContentsOfFile: но у меня есть URL. Могу ли я использовать NSData dataWithContentsOfURL: для чтения URL?

EDIT1


на основании ответа @ Daniel Я попробовал следующий код, но он не работает ...

NSLog(@"%s %@", __PRETTY_FUNCTION__, photoURL);     
if (photoURL) {
    NSURL* aURL = [NSURL URLWithString:photoURL];
    NSData* data = [[NSData alloc] initWithContentsOfURL:aURL];
    self.photoImage = [UIImage imageWithData:data];
    [data release];
}

Когда я запустил его, консоль показывает:

-[PhotoBox willMoveToWindow:] file://localhost/Users/gary/Library/Application%20Support/iPhone%20Simulator/3.2/Media/DCIM/100APPLE/IMG_0004.JPG
*** -[NSURL length]: unrecognized selector sent to instance 0x536fbe0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSURL length]: unrecognized selector sent to instance 0x536fbe0'

Глядя на стек вызовов, я вызываю URLWithString, который вызывает URLWithString :lativeToURL:, затем initWithString :lativeToURL :, затем _CFStringIsLegalURLString, затем CFStringGetLength, затем forwarding_prep_0 , затем forward *, затем - [NSObject doesNotRecognizeSelector].

Есть идеи, почему мой NSString (адрес photoURL - 0x536fbe0) не отвечает на длину? Почему говорится, что он не отвечает - [длина NSURL]? Разве он не знает, что param - это NSString, а не NSURL?

EDIT2


ОК, единственная проблема с кодом - преобразование строки в URL. Если я жестко закодирую строку, все остальное работает нормально. Так что что-то не так с моей строкой NSString, и если я не могу понять это, я думаю, что это должно быть другим вопросом. С этой вставленной строкой (я вставил путь из журнала консоли выше), она работает нормально:

photoURL = @"file://localhost/Users/gary/Library/Application%20Support/iPhone%20Simulator/3.2/Media/DCIM/100APPLE/IMG_0004.JPG";

Ответы [ 11 ]

0 голосов
/ 17 февраля 2019

Лучший и простой способ загрузить изображение через URL - это код:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    NSData *data =[NSData dataWithContentsOfURL:[NSURL URLWithString:imgUrl]];

    dispatch_async(dispatch_get_main_queue(), ^{
        imgView.image= [UIImage imageWithData:data];
    });
});

Заменить imgUrl на ImageURL
Замените imgView на UIImageView.

Он загрузит изображение в другой поток, поэтому не замедлит загрузку вашего приложения.

...