【问题标题】:NSURLSession with UICollectionViewNSURLSession 与 UICollectionView
【发布时间】:2016-01-25 21:55:09
【问题描述】:

我刚读到NSURLSession,我用它从一个url下载图像。这里就是我写的方法:

    -(void)startDownloadingWithURLString:(NSString*)urlString andDisplayOn:(UIImageView*)imageView{

            NSURL *url = [NSURL URLWithString:urlString];
            NSURLRequest *request = [NSURLRequest requestWithURL:url];

            NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration ephemeralSessionConfiguration];
            NSURLSession *urlSession = [NSURLSession sessionWithConfiguration:configuration];
            NSLog(@"%@",dataResponse);
            NSURLSessionDownloadTask *task = [urlSession downloadTaskWithRequest:request completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {

                  UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:location]];

                  dispatch_async(dispatch_get_main_queue(), ^{

                  imageView.image = image;
                 });
           }];
           [task resume];
      }

现在的问题是我在"cellForItemAtIndexPath:" 内部调用了这个方法。所以我滚动超时,这个方法被每个单元格一次又一次地调用(可重用性概念)。现在,由于下载过程是异步的,我可以'不知道什么时候下载完成。

那我应该怎么做才能避免这个问题呢?我只想下载一次图片。

【问题讨论】:

  • 使用现有选项,例如 SDWebImage
  • 由于我刚刚开始了解这些概念,我希望有一个不使用任何现有 3rd 方类的解决方案。我希望有一个更合乎逻辑的解决方案。
  • stackoverflow.com/questions/11511548/… 参考这个链接。它会帮助你。
  • 感谢您的链接...

标签: ios uicollectionview nsurlsession


【解决方案1】:

有第三方库可用于解决您的目的。我更喜欢使用 SDWebImage。它对我来说就像一种魅力。

只需导入

#import<SDWebImage/UIImageView+WebCache.h>

您可以使用该方法加载网络图像

 sd_setImageWithURL: 

它为你做同样的工作,而不是匆忙。 参考这个链接https://github.com/rs/SDWebImage 希望能帮助到你。快乐编码..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 2015-01-17
    • 1970-01-01
    • 2014-11-04
    • 2014-03-22
    相关资源
    最近更新 更多