如何下载图片?

时间:2016-07-16 13:17:43

标签: ios objective-c nsurl

使用此代码下载图像。但图像不会出现在显示屏上。

    <service android:name=".ChildEventListener "/>

UPD

我在我的xcode项目中更新了我的代码,但它也不起作用...为什么代码在我的Xcode项目中也不起作用?

  NSURL *url = [NSURL URLWithString:
 @"http://upload.wikimedia.org/wikipedia/commons/7/7f/Williams_River-27527.jpg"];

NSURLSessionDownloadTask *downloadPhotoTask = [[NSURLSession sharedSession]
 downloadTaskWithURL:url completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {
  _downloadedImage = [UIImage imageWithData:
    [NSData dataWithContentsOfURL:location]];
}];

// 4    
[downloadPhotoTask resume];

_downloadedImage = [UIImage imageNamed:@"Williams_River-27527.jpg"];
    [_book3 setBackgroundImage: _downloadedImage forState:UIControlStateNormal];
    [_scroller addSubview:_book3];

为什么代码在我的Xcode项目中也不起作用?

4 个答案:

答案 0 :(得分:1)

如果你希望这个代码起作用(不确定它会不会),那么你需要运行这个过程中的步骤:

//1     
NSURL *url = [NSURL URLWithString:
  @"http://upload.wikimedia.org/wikipedia/commons/7/7f/Williams_River-27527.jpg"];

// 2    
NSURLSessionDownloadTask *downloadPhotoTask = [[NSURLSession sharedSession]
 downloadTaskWithURL:url completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {
    // 3 
    _downloadedImage = [UIImage imageWithData:
    [NSData dataWithContentsOfURL:location]];

    //5
    dispatch_async(dispatch_get_main_queue(), ^{
        [_book3 setBackgroundImage: _downloadedImage forState:UIControlStateNormal];
        [_scroller addSubview:_book3];
    });
}];

// 4    
[downloadPhotoTask resume];

答案 1 :(得分:0)

您可以通过从图片集中加载来创建图片的第一个实例:_downloadedImage = [UIImage imageNamed:@"Williams_River-27527.jpg"];(希望有一个)

从您的网址下载图片后,您可以使用下载的内容创建一个第二个图片实例。但您的按钮仍会链接到第一个实例(强引用)。该按钮根本不知道新图像。

因此,如果您想要更改显示的图像,则必须在将其分配给_downloadedImage后再直接设置它:[_book3 setBackgroundImage: _downloadedImage forState:UIControlStateNormal];

也许你需要在那之后刷新ui。

答案 2 :(得分:0)

这是Swift的答案

    let url = URL.init(string: "https:yourUrl.com") as! URL

    URLSession.shared.dataTask(with: url) { (data, response, error) in
        if let error = error {
            print("Error needs to be handled")
            return
        }

        let image = UIImage.init(data: data!)
        DispatchQueue.main.async {
            self.yourImageView.image = image
        }
    }.resume()

答案 3 :(得分:0)

Xamarin.iOS的简单答案:

var url = new NSUrl("https:yourUrl.com");

var task = await NSUrlSession.SharedSession.CreateDataTaskAsync(url);
var image = UIImage.LoadFromData(task.Data);

yourImageView.Image = image;