2013-02-27 3 views
1

Я отправляю асинхронный HTTP-запрос GET и корректно вызывается метод executeHandler. Код в обратном вызове, например NSLog, запускается, поскольку я могу видеть вывод в журналах. Однако строки: self.imageView.image = nil; похоже, не вступает в силу до нескольких секунд после того, как заявление NSLog «попало сюда». Кто-нибудь знает, что происходит? Пример кода ниже:iOS: NSURLConnection sendAsynchronousRequest отложенная операция на NSImageView

В ViewController.m:

@interface ViewController() 
@property (weak, nonatomic) IBOutlet UIImageView *imageView; 
@end 

@implementation ViewController 
@synthesize imageView = _imageView; 

-void viewDidLoad { 
    // ImageView 
    UIImage *image = [UIImage imageNamed:@"test.jpg"]; 
    self.imageView.backgroundColor = [UIColor blackColor]; 
    self.imageView.clipsToBounds = YES; 
    self.imageView.image = image; 
} 

-void test { 

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://someurl"] cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:10]; 
    [request setHTTPMethod:@"GET"]; 
    NSOperationQueue *queue = [[NSOperationQueue alloc] init]; 
    [NSURLConnection sendAsynchronousRequest:request queue:queue 
completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { 
     self.imageView.image = nil; 
     NSLog(@"got here"); 
    }]; 
} 

@end

+0

Попробуйте отправить ноль для параметра очереди, чтобы иметь completionHandler выполнить в основном потоке – Mattias

+0

Я попытался установить очереди: ноль, но это приводит к completionHandler в NSURLConnection не дозвонились. – tom

ответ

3

Как предложено не отсрочка, назовите тексты на основной теме. Как так:

dispatch_async (dispatch_get_main_queue(),  ^{ 
self.imageView2.image = nil; 
self.imageView.image = nil; 
});  
Смежные вопросы