2010-09-04 65 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