我对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的这篇文章可能对实例之间的其他类型的通信有所帮助。