2014-10-09 3 views
0

У меня возникают трудности с назначением значения изображения на изображение с изображением. Я тестировал, что исходное изображение имеет значение во время назначения изображения изображения, и это действительно так. Однако присваивание просто не происходит, и изображение изображения остается нулевым. Может ли кто-нибудь помочь мне с тем, что я делаю неправильно?UIImageView.image Не получает значение UIImage

Спасибо.

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.scrollView.contentSize = self.imageView.image.size; 
    self.scrollView.delegate = self; 
    self.scrollView.minimumZoomScale = 1.0; 
    self.scrollView.maximumZoomScale = 100.0; 

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul); 
    dispatch_async(queue, ^{ 

     NSString *imageName = @"http://my.domain.com/image.png"; 
     UIImage *img = [[UIImage alloc] init]; 
     NSURL *imageURL = [NSURL URLWithString:imageName]; 

     [self.activityIndicator startAnimating]; 

     NSData *imageData = [NSData dataWithContentsOfURL:imageURL]; 
     img = [UIImage imageWithData:imageData]; 

     dispatch_async(dispatch_get_main_queue(), ^{ 

      self.imageView.image = img;//img HAS a value, but self.imageView.image does NOT receive it 

      [self.activityIndicator stopAnimating]; 
      [self.imageView setNeedsDisplay]; 
     }); 
    }); 
} 
+1

Вы проверили, чтобы убедиться, что self.imageView не ноль? – rdelmar

+0

Спасибо @rdelmar, кажется, что self.imageView ничто. Глупый вопрос, но разве это не так? У меня есть выход, определяемый как: '@property (слабый, неатомный) IBOutlet UIImageView * imageView;' если это полезно. –

+0

Вы не должны подключать розетку к изображению в IB. – rdelmar

ответ

0

Я думаю проблема с UIImage. где вы назначаете объект UIImage. Попробуйте это:

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul); 
dispatch_async(queue, ^{ 

    [self.activityIndicator startAnimating]; 
    NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://techbeasts.com/wp-content/uploads/2014/04/Wallpaper-HD.jpg"]]; // Your image URL. First check it in browser image is there. 

    dispatch_async(dispatch_get_main_queue(), ^{ 

     self.imageView.image = [UIImage imageWithData:imageData];//img HAS a value, but self.imageView.image does NOT receive it 
     [self.activityIndicator stopAnimating]; 
     [self.imageView setNeedsDisplay]; 
    }); 
}); 
+0

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

+0

Добро пожаловать ... @RobertSpencer – VRAwesome

0

Проблема заключается в том, что вы должны использовать dispatch_async и dispatch_sync пару. Таким образом, внутренний блок будет ждать, пока внешний блок завершит выполнение и загрузит изображение.

dispatch_async(queue, ^{ 

     NSString *imageName = @"http://my.domain.com/image.png"; 
     UIImage *img = [[UIImage alloc] init]; 
     NSURL *imageURL = [NSURL URLWithString:imageName]; 

     [self.activityIndicator startAnimating]; 

     NSData *imageData = [NSData dataWithContentsOfURL:imageURL]; 
     img = [UIImage imageWithData:imageData]; 

     dispatch_sync(dispatch_get_main_queue(), ^{ 

      self.imageView.image = img;//img HAS a value, but self.imageView.image does NOT receive it 

      [self.activityIndicator stopAnimating]; 
      [self.imageView setNeedsDisplay]; 
     }); 
    }); 

Затем убедитесь, что imageView выделяется либо программно, либо с помощью IB.

+0

Неправильно подключен розетка. Повторное подключение к ней решило проблему. Благодарю. –

+0

Хорошо, но вы пробовали асинхронную и синхронизирующую пару? – NeverHopeless

+0

Возможно, я вас не понимаю, но считаю, что я хочу, чтобы внутренний блок дождался внешнего блока. Я хочу, чтобы интерфейс был активным во время загрузки изображения, но затем отображал изображение после его загрузки. Я что-то упускаю? –

0

Неправильно подключен розетка. Повторное подключение к ней решило проблему.

Смежные вопросы