2015-05-19 71 views
3

我有下面的代碼幾行:擺脫警告「表達式結果未使用」

NSURL *url = [NSURL URLWithString:URL]; 
NSURLRequest* request = [NSURLRequest requestWithURL:url .... ]; 
NSURLConnection* connection = [NSURLConnection alloc]; 
[connection initWithRequest:request delegate:self]; 

在最後一行我得到「表達式結果未使用」警告。現在,根據我在網上閱讀的所有文章,這是調用方法的正確方法,並且建議使用語法來下載URL異步。如何重寫這段代碼來修復警告?

+0

我下面教程的一個例子是:http://codewithchris.com/tutorial-how-to-use-ios-nsurlconnection-by -example/ – user230910

+0

你可以用NSURLConnection替換最後2行* conn = [[NSURLConnection alloc] initWithRequest:request delegate:self]; – aBilal17

+0

,只是給我一個關於資源的警告是未使用:( – user230910

回答

3

您可以使用此行:

[NSURLConnection connectionWithRequest:request delegate:self]; 

代替:

NSURLConnection* connection = [NSURLConnection alloc]; 
[connection initWithRequest:request delegate:self]; 
+0

確定這個工程,但爲什麼? – user230910

+0

因爲你不需要NSURLConnection的實例變量只是運行它,與NSTimer相同 – ChikabuZ

1
#pragma clang diagnostic push 
#pragma clang diagnostic ignored "-Wunused-value" 
NSURL *url = [NSURL URLWithString:URL]; 
NSURLRequest* request = [NSURLRequest requestWithURL:url .... ]; 
NSURLConnection* connection = [NSURLConnection alloc]; 
[connection initWithRequest:request delegate:self]; 
#pragma clang diagnostic pop 

對於所有鏘警告的列表,你可以抑制take a look here

+0

壓制警告肯定是一件壞事(tm)??? – user230910

+0

嗯,我想你想壓制警告。不是嗎? – Lefteris

+0

不,我想要解決我的代碼有什麼問題,肯定聰明的人會出於某種原因提出警告? – user230910

1

替換爲最後兩行:

connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 

的警告是有用的,因爲alloc可以比init返回不同的對象(例如,當您使用NSArray時,它使用class cluster pattern)。

在這種情況下,connection將引用由alloc返回的此「中間」對象,而不是由init返回的完全初始化實例。

+0

這也適用,b ut似乎在欺騙編譯器而不是解決問題? – user230910

+0

添加了解釋。 –

+0

謝謝!它現在更清晰 – user230910

5

的問題來自於一個事實,即方法NSURLRequest initWithRequest…返回,你不存儲對象。

如果你不需要它,你應該寫:

(void)[connection initWithRequest:request delegate:self]; 

通知你故意要忽略返回值的編譯器。

+0

這個真的很好,對於一般情況非常有用,謝謝! – user230910

+0

對於其他C編譯器而言,它比pragma更便於攜帶。 –

1

只需更改最後一行:

connection = [connection initWithRequest:request delegate:self];