簡體   English   中英

如何將圖像設置為在另一個viewController中異步獲取的UIImageView?

[英]How to set image to UIImageView which is fetching asynchronously in another viewController?

我對IOS編程比較陌生。

我有一個NSObject “地方”,如下所示。

@interface Places : NSObject

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

@end

我在UITableView中列出了Places對象的數組。 tableView:cellForRowAtIndexPath:正在從Web URL異步獲取圖像。 tableView:didSelectRowAtIndexPath: ,我將相應的“ Places”對象傳遞給另一個ViewController(detailViewController)。 在那個detailViewController中,我使用以下代碼在UIImageView顯示圖像。

self.imageView.Image = self.myPlaces.placeImage

我的問題是當我傳遞該對象時,無需將圖像提取到placeImage。 無論如何,在self.imageView中連續完成圖像提取到placeImage后,是否要更新self.imageView。

我的代碼如下。 在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的這篇帖子可能對實例之間的其他類型的通信有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM