以下のコードは、URL への接続であり、http コード応答や最終 URL (リダイレクトの場合) などのいくつかのヘッダー応答をフェッチします。
- (NSString *)test
{
__block NSString *cod = @"x";
NSString *urlString = @"http://www.google.com";
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
cachePolicy:NSURLRequestReloadIgnoringCacheData
timeoutInterval:15.0f];
[request setHTTPMethod:@"HEAD"];
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response;
NSURL *resolvedURL = [httpResponse URL];
NSString *code = [NSString stringWithFormat:@"%ld", (long)[httpResponse statusCode]];
NSLog(@"%@", resolvedURL);
NSLog(@"%@", code);
cod = @"y"; // the idea was use something like 'cod = code', then return 'code' at end.. But it dont works too.
}];
return cod; }
ご覧のとおり、cod 変数を__block
型として宣言し、x 値を設定しました。ブロック内で cod に y 値を設定しましたが、メソッドの最後で cod の x 値を取得しました。私は cod = code のようなものを使用しようとしましたが、オブジェクトの型を尊重して cod を返しますが、ブロック内で割り当てたものはすべて、ブロック外の値を取得できません。私は何を間違っていますか?