2011-05-24 68 views
1

我想在OpenFlow API中使用url作为UIImageUIImage imageNamed

NSString *imageUrl = [[[newsEntries objectAtIndex:0] objectForKey: @"still"] retain]; 
NSURL *url2 = [NSURL URLWithString:imageUrl]; 
NSData *photoData = [NSData dataWithContentsOfURL:url2]; 
UIImage *imageUI = [UIImage imageWithData:photoData] 
UIImageView *myImage = [UIImageView initWithFrame:imageUI]; 
[(AFOpenFlowView *)self.view setImage:[UIImage imageNamed:myImage]]; 
[imageUr release]; 

[(AFOpenFlowView *)self.view setNumberOfImages:3]; 

我试过这样,但没有成功。我得到这个API的唯一方法是使用imageNamed类型。 initwithData没有成功。

那么如何才能将NSString更改为imageNamed方法呢?

回答

2

UIImageView与UIImage不同。

改变这一行:[(AFOpenFlowView *)self.view setImage:[UIImage imageNamed:myImage]];

要这样:[(AFOpenFlowView *)self.view setImage:[UIImage imageNamed:imageUI]];

,它应该工作。

0

这里有几个重要的错误。看起来你可能需要阅读C/Objective-C和类型。

这听起来像你断言,具体而言,线路

UIImage *imageUI = [UIImage imageWithData:photoData] 

不工作。该代码到这一点,其实看起来不错(虽然它不是必要保留然后释放imageUrl变量

一旦你创建你的UIImage,你应该能够直接传递到您的AFOpenFlowView

[(AFOpenFlowView*)self.view setImage:imageUI forIndex:0]; 

线

UIImageView *myImage = [UIImageView initWithFrame:imageUI]; 

有两个错误(和是不必要的反正)。首先,-initWithFrame需要CGRect作为它的参数,而不是一个UIImageUIImageView确实有一个初始化方法-initWithImage,这可能是你想要的。但无论哪种方式,以“初始化”启动方法是实例方法,而不是类的方法,所以你要叫他们在UIImageView的实际情况下,像这样:

UIImageView *myImage = [[UIImageView alloc] initWithImage:imageUI]; 

注意这将导致内存泄漏,除非你自动释放或释放它。

以下行,你正确地尝试给一个UIImageAFOpenFlowView,而是试图通过传递UIImageView+imageNamed方法来创建UIImage+imageNamed需要一个包含图像名称的NSString,并且传递任何其他内容都不起作用。

你必须时刻注意一种方法期望接收什么样的对象,并确保你找到某种方法来给它这样的事情。

也许你正在这里寻找的是这样的:

NSString *imageUrl = [[newsEntries objectAtIndex:0] objectForKey: @"still"]; 
NSString *imageName = [imageUrl lastPathComponent]; 
[(AFOpenFlowView *)self.view setImage:[UIImage imageNamed:imageName]]; 
相关问题