Извличане на изображение от 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

Опитайте тези два метода. И двата са от тук:как да декодирам BASE64 кодиран PNG с помощта на 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