使用iPhone sdk从URL加载图像在图像视图中?

时间:2011-08-29 23:47:55

标签: iphone objective-c image

我尝试通过网址加载图片视图,从网上获取了大量代码。不幸的是,我尝试的解决方案都没有为我工作,我得到了非常奇怪的错误。我正在获取图像数据,但没有来自此NSData的图像。我使用下面的代码和一个示例URL,它可以工作,给我代表的图像。但是,当我将其切换为使用我的实际URL时,我遇到了问题,因为它似乎正在尝试创建/返回一个太大的图像。这是我的代码:

    NSString *urlString = [[[_xmlDictionary objectForKey:@"response"] objectForKey:@"movie"] objectForKey:@"poster"];   

    NSArray *parts = [urlString componentsSeparatedByString:@"\""];
    urlString = [parts objectAtIndex:1];

    urlString = [urlString stringByAppendingFormat:@"/"];
    urlString = [urlString  
        stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    //NSURL * imageURL = [NSURL URLWithString:urlString];
    NSLog(@"URL:%@",urlString);
    NSURL * imageURL = [NSURL URLWithString:urlString];
    NSData * imageData = [[NSData alloc] initWithContentsOfURL:imageURL];
    UIImage * image = [[UIImage alloc] initWithData:imageData];
    m_imageView = [[UIImageView alloc] initWithImage:image];
    m_imageView.frame = CGRectMake(10, 10,300,300);
    [self.view addSubview:m_imageView];
    [imageData release];
    [image release];

我很感激任何帮助,提前谢谢。

5 个答案:

答案 0 :(得分:13)

您可以将您的回复从您的网址转换为NSData,然后使用

NSURL *url = [NSURL URLWithString:@"<YOUR URL STRING HERE>"];

NSData *data = [[NSData alloc] initWithContentsOfURL:url];

UIImage *tmpImage = [[UIImage alloc] initWithData:data];

yourImageView.image = tmpImage;

希望这有帮助。

修改

另外,为了使它在后台工作,你应该以异步方式使用一个单独的线程调用它,这样它就不会阻塞你的主线程,如下所示。

  [NSThread detachNewThreadSelector:@selector(downloadAndLoadImage) toTarget:self withObject:nil];

答案 1 :(得分:3)

对于大量数据,您应该考虑使用NSURLConnection:

NSURLRequest * request = [[NSURLRequest alloc] initWithURL:url];

NSURLConnection * conn = [NSURLConnection connectionWithRequest:request delegate:myDelegate];

通过这种方式,您可以跟踪从服务器返回的数据:

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
}

您已说明I have used below code with different url and it is giving image,如果您提供了您尝试使用的网址,那将会很有帮助。

帮助追踪问题的另一个想法是 UIWebView ,以验证您是否能够加载所需的图片。

答案 2 :(得分:1)

请尝试以下代码。我测试过了。工作正常。

//in .h file

 IBOutlet UIImageView *imgTest;

-(IBAction)buttonTapped:(id)sender;
-(void)LoadImage:(NSString *) irlString;
-(void)setImage:(NSData *) imgData;

//in .m file write the following code:

-(IBAction)buttonTapped:(id)sender
{
    [self performSelectorOnMainThread:@selector(LoadImage:) withObject:@"http://www.google.com/images/errors/logo_sm.gif" waitUntilDone:NO];
}

-(void)LoadImage:(NSString *) urlString
{
    NSURL *imgURL=[NSURL URLWithString:urlString];
    NSData *imgData=[NSData dataWithContentsOfURL:imgURL];
    [self performSelectorInBackground:@selector(setImage:) withObject:imgData];
}

-(void)setImage:(NSData *) imgData;
{
    imgTest.image=[UIImage imageWithData:imgData];
}

答案 3 :(得分:0)

        NSString *img=[NSString stringWithFormat:@"https://i1.sndcdn.com/avatars-000098290475-iw9m74-large.jpg?e76cf77"];
        NSURL *url = [NSURL URLWithString:img];
        NSData *data = [[NSData alloc] initWithContentsOfURL:url];
        UIImage *img1 = [[UIImage alloc]initWithData:data];
        self.artWorksImage.image = img1;

答案 4 :(得分:0)

这将有助于您从您的网站获取图片和分段和标题!

  

如果您希望我帮助您或获取第二张图片或您需要的任何帮助,请在评论中输入我的代码。

这个答案很晚,但我认为它对你的未来仍有帮助。你可以去解析网站,这是正确的方法,但我会告诉你如何以不同的方式做到这一点,这也可以用来读取xml,html,.com,任何东西,以及.rss所以它可以阅读RSS Feed 在这里:

这可以得到你的第一段,如果你要求我会告诉你如何得到第二段等等。因此,如果你想赚钱改变你的扫描仪找到$标题将是名称,但如果它不告诉我,我会告诉你如何获得第二个标题或标题。看到这个和向下。我将向您展示如何从整个网站获取html或xml,以便您可以查看网站的整个代码并查找关于首先阅读网站,然后阅读代码并在代码中查看狗名称它在标题标签下或标题下是什么,并根据您的需要更改下面的代码阅读整篇文章以了解所有内容。以下是如何获取信息的主要代码。转到第二个代码块,了解如何在日志或控制台中获取您网站的代码。要查找您的图像相同的东西通过NSLog查找并查找任何图像链接,如www.example.com/images/image.jpg或image.png或image.gif或一些图像扩展名,并查看启动此代码的代码是什么它或者在html和xml中有100个图像代码,查找代码的网址,然后在扫描仪中使用它,将

更改为代码然后再确保图像的网址仍然存在,就像继续缩短它一样,直到除了url之外什么都没有。

所以你有

你想要:www.example.com/images/image.jpg

您可以使用下面的扫描仪并将

更改为<media:content url:\",然后扫描它直到它是静止的,所以如果您知道该部分将始终相同,那么将其扫描到那里然后扫描仪的第二部分以\"

结束

查看大字下面的第一个代码块?这是我们需要改变的部分 -

NSString * webString2222 = mastaString;

        NSScanner *stringScanner2222 = [NSScanner scannerWithString:webString2222];



        NSString *content2222 = [[NSString alloc] init];




        //Change <p> to suit your need like <description> or <h1>
        [stringScanner2222 scanUpToString:@"<p>" intoString:Nil];



        [stringScanner2222 scanUpToString:@"." intoString:&content2222];







        NSString *filteredTitle = [content2222 stringByReplacingOccurrencesOfString:@"<p>" withString:@""];

        description.text = filteredTitle;

在我们的案例中,我们将此部分更改为 -

[stringScanner2222 scanUpToString:@"<media:content url:\"" intoString:Nil];
                [stringScanner2222 scanUpToString:@"\">" intoString:&content2222];

现在它有了网址,但扫描仪的第一部分始终保持使用 -

NSString * filteredTitle = [content2222 stringByReplacingOccurrencesOfString:@&#34;

然后使用它来下载图像 -

NSURL * imageURL = [NSURL URLWithString:[filteredTitle stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
        NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation([UIImage imageWithData:[NSData dataWithContentsOfURL:imageURL]])];

        UIImage * image = [UIImage imageWithData:imageData];

        [imageView setImage:image];

//这是您的网址     NSURL * URL = [NSURL URLWithString:@&#34; URL HERE&#34;];     //这是你拉的数据(不要改变)     NSData * data = [NSData dataWithContentsOfURL:URL];

// Assuming data is in UTF8. (dont change)
NSString *string = [NSString stringWithUTF8String:[data bytes]];
//Your textView your not done.
description.text = string;



//Do this with your textview

NSString *webStringz = description.text;



// Leave this
NSString *mastaString;
mastaString = webStringz;
{
    NSString *webString2222 = mastaString;



    NSScanner *stringScanner2222 = [NSScanner scannerWithString:webString2222];



    NSString *content2222 = [[NSString alloc] init];




    //Change <p> to suit your need like <description> or <h1>
    [stringScanner2222 scanUpToString:@"<p>" intoString:Nil];



    [stringScanner2222 scanUpToString:@"." intoString:&content2222];







    NSString *filteredTitle = [content2222 stringByReplacingOccurrencesOfString:@"<p>" withString:@""];

    description.text = filteredTitle;


}
标题?相同的交易会将<p>更改为RSS <title><description>中的<title>。 图片 ?相同的交易改变了<p> to what ever your RSS or website uses to get a image to find But remember for both of them when you change the

`你看到你说stringByReplacingOccurences的链接也必须改变它。

然后你必须删除它并使你的代码像这样:

//This is your URL
        NSURL *URL = [NSURL URLWithString:@"URL HERE"];
        //This is the data your pulling (dont change)
        NSData *data = [NSData dataWithContentsOfURL:URL];

        // Assuming data is in UTF8. (dont change)
        NSString *string = [NSString stringWithUTF8String:[data bytes]];
        //Your textView your not done.
        description.text = string;
        NLog(@"%@", string)


        //Do this with your textview

        NSString *webStringz = description.text;



        // Leave this
        NSString *mastaString;
        mastaString = webStringz;

现在检查你的日志它显示你的整个网站html或rss代码然后你滚动并阅读它并找到你的图像链接并检查它之前的代码并将String Scanner更改为你的需求非常棒,你必须改变stringByReplacingOccurences。

就像我说用这种方法做的时候图像有点棘手但是XML解析比你学习它容易得多,哈哈。如果您要求,我会告诉您如何操作。 告诉我,如果您在浏览html或xml时遇到问题并再次指定哪个网站,我会通过查看,我将告诉您如何获得所需的一切。 确保:

如果您希望我向您展示如何在XML中进行评论。 如果您希望我向您展示如何查找第二段或图像或标题或其他只是评论。

如果你需要任何评论。

再见我提供的代码很有趣,任何错误只是评论! !!!!

:d