2012-01-03 2 views
10

私はARCを使い始めています。最初に試してみたことの1つは、URLへのHTTP呼び出しを行い、データを取り戻すことでした。それは私が私の「後藤」のようなsendSynchronousRequestを使用してのに行ってきました意味のでもちろん、HTTPステータスコードは、私にとって重要である:NSURLConnection ARCを使ってsendSynchronousRequestを呼び出す

NSError *error = [[NSError alloc] init]; 
NSHTTPURLResponse *responseCode = nil; 

NSData *oResponseData = [NSURLConnection sendSynchronousRequest:request returningResponse:responseCode error:error]; 

ARCで、私はその最後の行に、コンパイラのエラーと警告を取得可能となりました。

エラー

Implicit conversion of an Objective-C pointer to 'NSURLResponse *__autoreleasing *' is disallowed with ARC

Implicit conversion of an Objective-C pointer to 'NSError *__autoreleasing *' is disallowed with ARC

file://localhost/Users/jason/Projects/test/Data/DataService.m: error: Automatic Reference Counting Issue: Implicit conversion of an Objective-C pointer to 'NSURLResponse *__autoreleasing *' is disallowed with ARC

file://localhost/Users/jason/Projects/test/Data/DataService.m: error: Automatic Reference Counting Issue: Implicit conversion of an Objective-C pointer to 'NSError *__autoreleasing *' is disallowed with ARC

警告

私は参照渡しを伝えることができるものから、

Incompatible pointer types sending 'NSHTTPURLResponse *_strong' to parameter of type 'NSURLResponse *_autoreleasing *'

Incompatible pointer types sending 'NSError *_strong' to parameter of type 'NSError *_autoreleasing *'

がこれをめちゃくちゃにされたものですが、私は何を正しい道にわかりませんよ解決してください。 ARCと同様のタスクを達成する「より良い」方法はありますか?

答えて

22
NSError *error = nil; 
    NSHTTPURLResponse *responseCode = nil; 

    NSURLRequest *request; 

    NSData *oResponseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&responseCode error:&error]; 

エラー/レスポンスコードポインタへの参照がありません。

+0

LOLは休日の後に考えようと私に役立ちます! –

2

(NSHTTPURLResponse __autoreleasing *)型と(NSError __autoreleasing *)型を使用する必要があります。

NSHTTPURLResponse __autoreleasing *response = nil; 
NSError __autoreleasing *error = nil; 

// request 
NSData *result = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 

そして、あなたがフォローしてそれらを処理することができます

if (response){ 
    // code to handle with the response 
} 
if (error){ 
    // code to handle with the error 
} 

そうしないと、できないグローバルVARSとして使用応答とエラー。やった場合は、以下のcorrectly.Likeに動作しません。上記

.h 
NSHTTPURLResponse *__autoreleasing *response; 
NSError *__autoreleasing *error; 

.m 
// request 
NSData *result = [NSURLConnection sendSynchronousRequest:request returningResponse:response error:error]; 

コードは動作しません!

関連する問題