如何将图像设置为在另一个viewController中异步获取的UIImageView?

时间:2015-06-03 10:37:02

标签: ios objective-c uitableview uiimageview uiimage

我对IOS编程比较陌生。

我有一个NSObject“地点”,如下所示。

@interface Places : NSObject

 @property(strong) NSString *placeName;
 @property(strong) UIImage *placeImage;

@end

我在UITableView中列出了Places对象数组。在tableView:cellForRowAtIndexPath:上,图像是从网络网址异步获取的。在tableView:didSelectRowAtIndexPath:上,我将相应的“Places”对象传递给另一个ViewController(detailViewController)。在那个detailViewController中,我使用下面的代码在UIImageView中显示图像。

self.imageView.Image = self.myPlaces.placeImage

我的问题是当我传递该对象时,无需将图像提取到placeImage。无论如何,在mainViewController中连续完成图像提取到self.imageView时更新placeImage

我的代码如下。它在mainViewController的tableView:cellForRowAtIndexPath:中调用。

    NSURL *url = [NSURL URLWithString:@"http://imageurl_goes_here"];

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

        NSData *imageData = [NSData dataWithContentsOfURL:url];

        dispatch_async(dispatch_get_main_queue(), ^{
            if(imageData != nil)
            {
              place.placeImage = [UIImage imageWithData: imageData];
              cell.cellImageView.image = place.placeImage;
            }

        });
    });

1 个答案:

答案 0 :(得分:1)

嗯,有一些技术可以存档:

  • 每次收到图像时都可以通知第二个视图控制器。例如。在你的内心dispatch_async。但这需要主控制器了解第二个。
  • 您可以使用Key-Value Observing技术观察每个地方的图像更新。在这种情况下,您可能还想使用一些方便的库,它将为您提供理智(如取消分配对象时取消订阅,否则您将崩溃),如that one或任何其他。
Matt Thompson的

This post可能对实例之间的其他类型的通信有所帮助。