2012-05-10 21 views
2

と警告NSURLConnectionを使用して取得しています。この警告を回避しようとしていますガイド:は非同期NSURLConnection

-(void)goGetData{ 
    responseData = [NSMutableData data]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://somefile.php"]]; 
    [[NSURLConnection alloc]initWithRequest:request delegate:self]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ 
    [responseData setLength:0]; 
} 
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
    [responseData appendData:data]; 
} 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { 
    //label.text = [NSString stringWithFormat:@"Connection failed: %@", [error description]]; 
    NSLog(@"Connection failed: %@",error); 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
    NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 

    NSMutableArray *qnBlock = [responseString JSONValue]; 
    for (int i = 0; i < [qnBlock count]; i++){ 
     NSLog(@"%@",[qnBlock objectAtIndex:i]); 
    } 
} 

警告がラインである:

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

警告は次のとおりです。

Expression result unused. 

コード全体が正常に動作しますが、私は予防策をとっています。

+2

このリンクをクリックしてください。あなたの質問が重複する可能性があります。 http://stackoverflow.com/questions/7914990/xcode-4-warning-expression-result-unused-for-nsurlconnection – iMash

答えて

1

は、次の操作を行うことができます:

[NSURLConnection connectionWithRequest:request delegate:self]; 

の代わりに:

[[NSURLConnection alloc]initWithRequest:request delegate:self]; 
+1

これは機能しました。なぜなら、余分な括弧が警告を引き起こしている理由を説明するためです... Thanx ... –

+1

あなたはどこにも格納していませんでしたが、あなたは 'NSURLConnection'クラスのオブジェクトを割り当てて初期化していました...解決策Iあなたはクラスメソッドを使用しています(あなたはクラス 'NSURLConnection'のオブジェクトを割り当てていません) – Peres

+1

この答えがあなたを助けてくれたと思うなら、それが正しいことをマークしてください。将来的にあなたを助けてくれるでしょう(受け入れられた答えの%を上げてください)。これは将来のユーザーにここに来るかもしれないことを教えてくれます。 – Peres

4

どちらのアプローチがオブジェクトを割り当てます。アロケーションで

、あなたはそれを解放する責任がある

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

。それは自動解放プールによって保持される

[NSURLConnection connectionWithRequest:request delegate:self]; 

connectWithRequestで

、。私の推測では、autoreleaseプールによって保持されているため、ハンドルを解放する必要はなく、コンパイラはautoreleaseプールにハンドルがあることを確認します。

allocを使用すると、コンパイラはおそらく後で解放するためのハンドルを保持することを期待しています。したがって、これは警告として警告します。

実際には、明示的に保持するかどうかに関係なく、デリゲートメソッドはハンドルを取得します。したがって、デリゲートメソッドに渡されたハンドルで解放することができます。警告は実際には偽りですが、ただの警告です。

関連する問題