Я хочу отобразить изображение на экране, которое я беру из Интернета. Я использовал NSURLConnection, чтобы создать асинхронный вызов, чтобы взять данные, и в блоке ответа я вызвал код, чтобы назначить его объекту UIImage.iOS: Почему мне нужно использовать сон (1) после NSURLConnection sendAsynchronousRequest?
Мой вопрос, почему мне нужно вызвать sleep (1) после выполнения блока? Если я не назову его, тогда мое изображение не будет нарисовано на экране. Это еще один, более элегантный способ добиться этого?
-(void)loadImage:(NSString *)url
{
NSURL *imageURL = [NSURL URLWithString:url];
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
NSURLRequest *imageRequest = [NSURLRequest requestWithURL:imageURL cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:5.0f];
[NSURLConnection sendAsynchronousRequest:imageRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
if(!connectionError) {
if(data) {
//there goes the main thingy
self.myView.wallpaperImage = [UIImage imageWithData:data];
[self.myView setNeedsDisplay];
} else {
NSLog(@"No data found at url:%@",url);
}
} else {
NSLog(@"Could not connect to %@",url);
}
}];
sleep(1);
}
Никогда не называйте 'sleep()'. – zaph
Возможно, я спрашивал не так ... Я знаю, что мне не нужно это называть, но если я этого не сделаю, у меня ничего нет, кроме белого экрана. Если я вызываю сон, тогда изображение рисуется без проблем. – Bogdan
Убедитесь, что все вызовы UIKit выполняются в главной очереди. – Jiri