2011-12-15 30 views
21

返り値1または0だけを返すにはどうすればいいですか?URLリクエストから非同期に返す。非同期URLリクエストの送信方法

現在、私はこの方法でそれを実行します。

 NSString *UTCString = [NSString stringWithFormat:@"http://web.blah.net/question/CheckQuestions?utc=%0.f",[lastUTCDate timeIntervalSince1970]]; 
     NSLog(@"UTC String %@",UTCString); 
     NSURL *updateDataURL = [NSURL URLWithString:UTCString]; 
     NSString *checkValue = [NSString stringWithContentsOfURL:updateDataURL encoding:NSASCIIStringEncoding error:Nil]; 
     NSLog(@"check Value %@",checkValue); 

この作品、私は戻ってURLからの応答を得たまでしかし、それはでそれを行いますので、私はそれを設定するのですか、私のメインスレッドをブロックしていますメインスレッドの代わりに別のスレッド?

編集:私はこれで私の機能をupcallingて末端ANSWER は、それがうまく機能:)

[self performSelectorInBackground:@selector(shouldCheckForUpdate) withObject:nil]; 
+5

のiOS 5のとおり、あなたが使用することができます '+(無効)sendAsynchronousRequest:(NSURLRequest *)リクエストキュー:(NSOperationQueue *)キューcompletionHandler:(無効(^)(NSURLResponse *、NSDataの*、NSError *) )ハンドラを使用する代わりに、デリゲートオブジェクトを作成するよりも簡単な要求に対して、より簡単で明快です。私は後でこの方法を示す答えを書こうとします。 –

+1

@MarkAmeryあなたの答えを見てうれしいです。私は 'sendAsynchronousRequest'の簡単な例を見つけるのが難しいです。 –

答えて

28

あなたはNSURLConnectionクラス

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

を使用し、その応答とそのデリゲートメソッドを使用してエラーを処理することができます。

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
- (void)connectionDidFinishLoading:(NSURLConnection *)connection 

あなたはNSURLConnection

編集の実装を見つけることができます:NSURLConnectionは、Appleが設けられているがは、URLリクエストを配置するより推奨される方法です。しかし、私はAFNetworkingライブラリは非常に時間を節約し、実装しやすく、堅牢でサードパーティの実装として簡単だと分かった。あなたはそれを試してみるべきです。

+1

どのメソッドを使ってクッキー値を取得する必要がありますか? – kAnNaN

5

使用NSURLConnectionとは、あなたの要求を行います。非同期

+ connectionWithRequest:delegate: 
– initWithRequest:delegate: 
– initWithRequest:delegate:startImmediately: 
– start 

は、AppleデベロッパAPIリファレンスのNSURLConnectionクラスをチェックデータのロードデータ同期し

+ sendSynchronousRequest:returningResponse:error: 

ロード

: は、その後、あなたはNSURLConnectionの方法との同期または非同期接続を開始することができます。

+0

ここにリンクがあります:http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSURLConnection_Class/Reference/Reference.html – samfisher

26

はこれを試してみてください。

.H:

NSMutableData *responseData; 

.M:iOSのXCodeのドキュメントと呼ばれるLazyTableImagesの例があり

- (void)load 
{ 
    NSURL *myURL = [NSURL URLWithString:@"http://www.example.com"]; 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:myURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60]; 

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

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 
    responseData = [[NSMutableData alloc] init]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 
    [responseData appendData:data]; 
} 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
{ 
    [responseData release]; 
    [connection release]; 
    [textView setString:@"Unable to fetch data"]; 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    NSLog(@"Succeeded! Received %d bytes of data",[responseData 
                length]); 
    NSString *txt = [[[NSString alloc] initWithData:responseData encoding: NSASCIIStringEncoding] autorelease]; 
} 
+0

私はちょうど1または0の返信が必要です、これはあまりにも多いですか? – Desmond

+0

@Maulik "Smart Developers"ルームを追加してください。 – MinuMaster

+0

@Maulik、あなたは私の一日を救った、大きな感謝! – DeZigny

2

。これにより、スクロールが停止した後で、画面に表示されるセルに非同期URLと非同期イメージのロードが行われます(UITableView)。プロトコルの優れた例、非同期データ処理など

3

恥知らずのコピーhttps://gist.github.com/knmshk/3027474から。すべてのクレジットはhttps://gist.github.com/knmshkになります。

xmlData = [[NSMutableData alloc] init]; 
NSURL *url = [NSURL URLWithString: 
@"http://forrums.bignerdranch.com/smartfeed.php?" 
@"limit=NO_LIMIT&count_limit20&sort_by=standard&" 
@"feed_type=RSS2.0&feed_style=COMPACT"]; 
NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
//connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES]; 
NSOperationQueue *queue = [[NSOperationQueue alloc]init]; 
[NSURLConnection sendAsynchronousRequest:request 
            queue:queue 
         completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){ 
          if (error) { 
           xmlData = nil; 
           NSLog(@"error:%@", error.localizedDescription); 
          } 
          [xmlData appendData:data]; 
         }]; 
関連する問題