2015-08-06 2 views
0

Я пытаюсь загрузить изображение в моем знамени, а также URL для этого баннера и все просто отлично, за исключением его apears через несколько секунд (10+ сек)Получить изображение с задержкой URL

Сначала я думал, что это может быть скорость соединения, но если я жестко запрограммировал строку, в которой изображение должно появиться, оно появляется немедленно.

Вот что я делаю прямо сейчас.

NSURLSession *session = [NSURLSession sharedSession]; 
NSURLSessionDataTask *dataTask = [session dataTaskWithURL:adUrl completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 
    adJson = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; 
    adImageURL = [NSString stringWithFormat:@"%@", adJson[@"sponsor"][@"sponsor_image"]]; 
    adUrlString = [NSString stringWithFormat:@"%@", adJson[@"sponsor"][@"sponsor_url"]]; 

    [UIApplication sharedApplication].networkActivityIndicatorVisible=NO; 

    // Set adImage 
    [[self adBanner]setImage:[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:adImageURL]]]]; 

    // Ad TapGuestures to adImage 
    UITapGestureRecognizer *adTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(adTapMethod)]; 
    [[self adBanner]setUserInteractionEnabled:YES]; 
    [[self adBanner]addGestureRecognizer:adTap]; 
}]; 
[dataTask resume]; 

Как я уже сказал, если я:

[[self adBanner]setImage:[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"example.com/img.png"]]]]; 

и поставить этот код из NSURLSessionDataTask он apears ни в секунду.

Что я делаю неправильно и как получить изображение как можно быстрее?

+0

убедитесь, что вы работаете в 'setImage' на главной очереди – kezi

+0

Как я могу сделать, что я новичок в разработке IOS –

+0

Смотрите мой ответ на' dispatch_async (dispatch_get_main_queue() '. – kezi

ответ

1

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

Вы должны включить setImage: как таковой.

NSURLSession *session = [NSURLSession sharedSession]; 
NSURLSessionDataTask *dataTask = [session dataTaskWithURL:adUrl completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 
    adJson = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; 
    adImageURL = [NSString stringWithFormat:@"%@", adJson[@"sponsor"][@"sponsor_image"]]; 
    adUrlString = [NSString stringWithFormat:@"%@", adJson[@"sponsor"][@"sponsor_url"]]; 

    [UIApplication sharedApplication].networkActivityIndicatorVisible=NO; 

    // Set adImage 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [[self adBanner] setImage:[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:adImageURL]]]]; 

     // Ad TapGuestures to adImage 
     UITapGestureRecognizer *adTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(adTapMethod)]; 
     [[self adBanner] setUserInteractionEnabled:YES]; 
     [[self adBanner] addGestureRecognizer:adTap]; 
    }); 
}]; 
[dataTask resume]; 
Смежные вопросы