如何将图像设置为UIImageView它在另一个viewController中异步抓取



我对IOS编程比较陌生。

我有一个NSObject"位置",如下所示。

@interface Places : NSObject
 @property(strong) NSString *placeName;
 @property(strong) UIImage *placeImage;
@end

我列出了UITableView中的place对象数组。在tableView:cellForRowAtIndexPath:上,图像从web url异步获取。在tableView:didSelectRowAtIndexPath:上,我将各自的"场所"对象传递给另一个ViewController (detailViewController)。在那个detailViewController中,我使用下面的代码在UIImageView中显示图像。

self.imageView.Image = self.myPlaces.placeImage

我的问题是,当我传递该对象,图像不需要提取到placeImage。是否有更新self.imageView连续完成的图像提取到placeImage在mainViewController.

我的代码如下。它在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;
            }
        });
    });

这里有一些存档的技巧:

  • 你可以在每次收到图像时通知你的第二个视图控制器。例如,在你内心的dispatch_async。但是这需要主控制器对第二个控制器有更多的了解。
  • 你可以使用键值观察技术来观察每个地方的图像更新。在这种情况下,您可能还需要使用一些方便的库来为您做一些正常的事情(比如在对象被释放时取消订阅,否则您将会崩溃)。

Matt Thompson的这篇文章可能对实例之间的其他类型的通信有所帮助。

相关内容

最新更新