【问题标题】:Images pulled from url not appearing on UIImageView从 url 提取的图像未出现在 UIImageView 上
【发布时间】:2015-02-15 15:23:17
【问题描述】:

我编写了一个应用程序,它从 RSS 提要中获取图像的 url 并将其显示在 UIImageView 中,我知道我正在拉取的图像是有效的,因为图像的 url 直接进入我的标签,显示url,我输入了它,它转到了一个图像。这是一个jpg图像。烦人的是,即使我手动输入图片的网址,任何图片都不起作用。

这是我的代码,图像视图代码在底部。

- (void)viewDidLoad {
    [super viewDidLoad];




    NSURL *URL = [NSURL URLWithString:@"http://rss.cnn.com/rss/edition_world.rss"];
    NSData *data = [NSData dataWithContentsOfURL:URL];

    // Assuming data is in UTF8.
    NSString *string = [NSString stringWithUTF8String:[data bytes]];
    titleLabelLatestNews.text = string;


    NSString *webString = titleLabelLatestNews.text;
    NSScanner *stringScanner = [NSScanner scannerWithString:webString];
    NSString *content = [[NSString alloc] init];
    while ([stringScanner isAtEnd] == NO) {
        [stringScanner scanUpToString:@"url=\"" intoString:Nil];
        [stringScanner scanUpToString:@"/>" intoString:&content];

        NSString *filteredImage = [content stringByReplacingOccurrencesOfString:@"url=\"" withString:@""];
        NSString *filteredImage2 = [filteredImage stringByReplacingOccurrencesOfString:@"\"" withString:@""];
        titleLabelLatestNews.text = filteredImage2;

        NSURL * imageURL = [NSURL URLWithString:filteredImage2];
        NSData * imageData = [NSData dataWithContentsOfURL:imageURL];
        UIImage * image = [UIImage imageWithData:imageData];
    [imageView setImage:image];



    }

我用于 imageView 的代码 -

NSURL * imageURL = [NSURL URLWithString:filteredImage2];
            NSData * imageData = [NSData dataWithContentsOfURL:imageURL];
            UIImage * image = [UIImage imageWithData:imageData];
        [imageView setImage:image];

是因为JPG吗? 是因为我的 ImageView 吗? 一切都已链接,一切正常,除了这个我已经看到所有关于如何从 url 获取图像的帖子,我尝试了所有方法,但似乎没有任何效果,图像视图保持空白和白色。

总结: 我正在从网站上提取图像链接,并且该链接有效,因为我对其进行了测试,并且我尝试下载并放入图像视图的任何其他图像也不起作用,图像视图是空白的,并且什么也没有显示。

感谢您的帮助!

【问题讨论】:

  • imageData 包含什么?你检查它是否不是零? (只是问你知道)
  • 等一下我会检查
  • 天哪,它返回 nil 好的,我该如何解决这个问题? @Avi Tsadok
  • 首先,检查图片的url是否有返回内容。把它放在浏览器里就行了。
  • 哦,刚刚看到你检查了。等等

标签: ios objective-c image url uiimageview


【解决方案1】:

好的,你看不到图像,因为 imageData 为 nil。 imageData 为 nil,因为 imageURL 也是 nil。

您需要在创建 NSURL 之前对 url 字符串进行转义。

而不是:

NSURL * imageURL = [NSURL URLWithString:filteredImage2];

做:

NSURL * imageURL = [NSURL URLWithString:[filteredImage2 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

【讨论】:

  • 令人惊奇的消息它不起作用:( NSURL * imageURL = [NSURL URLWithString:[filteredImage2 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; NSData * imageData = [[NSData alloc] initWithContentsOfURL: imageURL ]; imageView.image = [UIImage imageWithData: imageData];
  • 对我来说它有效 - 我看到了图像。一步一步调试,告诉我是什么问题。 NSURL 包含什么? NSData 包含什么?
  • 等待!T!T!T!T!TT!T!T!
  • 很高兴听到这个消息。 :)
  • 最后我会告诉你,我已经12岁了,对我造成的所有麻烦感到抱歉!哈哈。我总是遇到这样的问题,我希望有比我年长和经验更丰富的人来帮助我 - 这是我的电子邮件:programmer75@rocketmail.com 如果你愿意,可以给我发电子邮件:D 谢谢! @AviTsadok
【解决方案2】:

要使用 NSURLSession 下载文件,请执行以下操作:

 NSURLSession *downloadFileSession = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
NSURLSessionDownloadTask *downloadTask =[downloadFileSession downloadTaskWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:path]] completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {

// handle the response. 'location' is the file you downloaded

}];

[downloadTask resume];

但同样,NSData 应该完成这项工作。在开始下载之前重新检查图像的 url。您正在修改 url,所以请确保它是有效的。

【讨论】:

  • 你的意思是[下载任务简历];
  • 它的任何链接都很有趣,即使我手动添加它也不起作用,您能否将代码复制粘贴到您的项目中并尝试查看错误是什么非常感谢您的帮助
  • 检查是否在while循环中正确获取了图片的url
  • 您是否重新检查了网址?你是什​​么意思'没有工作'?如果 url 有效,那就没有意义了..
  • 让我检查一下。等等 :)
【解决方案3】:

虽然这是一个基本的代码,但我想我已经解决了

UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 100, 100, 100)];
[imgView setBackgroundColor:[UIColor redColor]];
[self.view addSubview:imgView];

NSURL *URL = [NSURL URLWithString:@"http://rss.cnn.com/rss/edition_world.rss"];
NSData *data = [NSData dataWithContentsOfURL:URL];

// Assuming data is in UTF8.
NSString *string = [NSString stringWithUTF8String:[data bytes]];


NSScanner *stringScanner = [NSScanner scannerWithString:string];
NSString *content = [[NSString alloc] init];
while ([stringScanner isAtEnd] == NO)
{
    [stringScanner scanUpToString:@"url=\"" intoString:Nil];
    [stringScanner scanUpToString:@"/>" intoString:&content];

    NSString *filteredImage = [content stringByReplacingOccurrencesOfString:@"url=\"" withString:@""];
    NSString *filteredImage2 = [filteredImage stringByReplacingOccurrencesOfString:@"\"" withString:@""];

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ // 1
        NSData *imgData = [NSData dataWithContentsOfURL:[NSURL URLWithString:[filteredImage2 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]];
        dispatch_async(dispatch_get_main_queue(), ^{ // 2

            if(imgData)
            {
                UIImage *img = [UIImage imageWithData:imgData];
                if(img)
                {
                    [imgView setImage:img];
                }
                else
                {
                    NSLog(@" image url was %@ ",filteredImage2);
                }

            }
            else
            {
                 NSLog(@" image url was %@ ",filteredImage2);
            }

        });
    });
}

【讨论】:

  • 哈哈,这看起来很复杂,接受的答案很容易。但感谢您的意见。只有当我有足够的声望来投票时
  • :) 为 12 岁的 IOS 开发者干杯
  • 谢谢!我也使用了您的示例,并且有效:)
  • 和@Avi Tsadok的原理是一样的...... url里该死的连字符需要编码
猜你喜欢
  • 1970-01-01
  • 2011-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-24
相关资源
最近更新 更多