Получить изображение с URL-адреса в iOS

Я пытаюсь получить изображение с URL-адреса и показать его в ImageView. Изображение закодировано в base64Encoded Data. Я использую для этого следующий код

UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:url scale:2.0];

[ImageView setImage: image];

Может кто подскажет в чем проблема.


person Guri    schedule 14.04.2014    source источник
comment
Вы проверили, не являются ли ваши данные нулевыми?   -  person Larme    schedule 14.04.2014
comment
Вы аутентифицированы в службе, к которой пытаетесь получить доступ? Что произойдет, если вы поместите URL-адрес в браузер.   -  person GuybrushThreepwood    schedule 14.04.2014
comment
Получите данные из URL, декодируйте их с помощью base64. Используйте декодированные данные для создания UIImage.   -  person Pooja M. Bohora    schedule 14.04.2014
comment
когда я открываю URL-адрес в браузере, он работает нормально. так что данные не нулевые. Нет необходимости проходить аутентификацию для получения изображения по этой ссылке   -  person Guri    schedule 14.04.2014


Ответы (3)


Есть большая вероятность, что dataWithContentsOfURL по какой-то причине не удалось. Вместо этого вы должны использовать dataWithContentsOfURL:options:error: и выполнить некоторую обработку ошибок.

Изменить:

Фактически, вы вообще не должны использовать методы NSData для загрузки данных изображения. В документах Apple особо указано, что они подходят только для локальных ресурсов, и рекомендуется использовать этот метод NSURLSession при загрузке: (NSURLSessionDataTask *)dataTaskWithURL:(NSURL *)url completionHandler:(void (^)(NSData *data, NSURLResponse *response, NSError *error))completionHandler

person Clafou    schedule 14.04.2014

Возможно, это не сработает, потому что вам нужно войти в систему, чтобы увидеть изображение с URL-адреса, на который вы ссылаетесь во фрагменте кода.
Если я попытаюсь просмотреть изображение с URL-адреса, мне будет предложено войти в систему.

person lukas    schedule 14.04.2014
comment
Да нормально работает. Я переустановил приложение в симуляторе после удаления предыдущего - person Guri; 14.04.2014

Попробуйте эти два метода. Они оба отсюда: как декодировать PNG в кодировке BASE64 с использованием Objective C

Вы можете декодировать его в NSData, используя это:

-(NSData *)dataFromBase64EncodedString:(NSString *)string{
    if (string.length > 0) {

        //the iPhone has base 64 decoding built in but not obviously. The trick is to
        //create a data url that's base 64 encoded and ask an NSData to load it.
        NSString *data64URLString = [NSString stringWithFormat:@"data:;base64,%@", string];
        NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:data64URLString]];
        return data;
    }
    return nil;
}

Затем используйте это, чтобы получить изображение:

-(void)imageFromBase64EncodedString{

    NSString *string = @"";  // replace with encocded string
    NSData *imageData = [self dataFromBase64EncodedString:string];
    UIImage *myImage = [UIImage imageWithData:imageData];

    // do something with image
}

2-й метод, который вы можете использовать:

Вы можете загрузить файлы классов с http://projectswithlove.com/projects/NSData_Base64.zip.

Затем #import "NSData+Base64.h"

поставь это твой код

NSData *data = [[NSData alloc] initWithData:[NSData dataWithBase64EncodedString:strData]];

Теперь вы можете конвертировать в UIImage

UIImage *image = [UIImage imageWithData:data];
person Steve Sahayadarlin    schedule 14.04.2014