2010-09-04 43 views
1

我有我的实用工具类这是不必要的警告吗?

+ (UIImage *) getImage:(NSURL*) fromUrl { //Warning here 
    NSData *urlData = [NSData dataWithContentsOfURL:fromUrl]; 
    UIImage *image = [[[UIImage alloc] initWithData:urlData] autorelease]; 
    return image; 
} 

之一以下静态方法对于这种方法,我收到一个波纹管警告信息

警告:不兼容的Objective-C 类型初始化“结构NSURL *', expected'struct NSString *'

我没有注意到任何异常,这是我可以忽略的吗?或者我该如何解决它?

+0

你怎么称呼'+的getImage :'? – kennytm 2010-09-04 17:44:08

+0

@KennyTM请参阅戴夫的答案... – 2010-09-04 17:55:42

+1

没有不必要的警告。即使它在技术上正确并且编译器打印出警告,它仍然是错误的,因为编译器不能识别它是正确的。向他说清楚,你很好。 – 2010-09-04 18:43:17

回答

9

警告是正确的,因为存在冲突类型,并且与所有警告一​​样,您应该修复它。

更有可能的是,您有两个getImage:方法声明,一个需要NSString和一个以NSURL作为唯一参数。在Objective-C中,方法名称空间是平坦的,推荐的模式是对于任何给定的选择器,只有一个声明的论证。

虽然有一个更微妙的问题。 getImage:并不是真正的描述性的,因为它可能不像标准实践所要求的那样具有描述性。

更好的方法声明将是:

+ (UIImage *) imageFromURL: (NSURL *) anURL; 

更具描述性的。不太模糊。

+0

有趣!顺便说一句,所以要求我等5分钟才能接受答案。 – 2010-09-04 17:49:53

2

你可能会这样:

UIImage * image = [MyUtilityClass getImage:@"http://example.com/image.jpg"]; 

你应该这样做:

UIImage * image = [MyUtilityClass getImage:[NSURL URLWithString:@"http://example.com/image.jpg"]]; 

(忽略命名约定....)

+0

如果他这样做,它会抛出一个例外,我敢打赌。 – bbum 2010-09-05 01:06:35