こんにちは、これは私の最初の投稿となり、Objective-Cの新機能です。私はたくさんの読書をしていて、多くのグーグルと多くの私の答えがこのサイトから来ています。だから、今私は本当に私は専門家に尋ねた時間だと思って立ち往生している。NSURLConnectionからブロッキングなどを使用してデータを取得する
私は基本的には、与えられたURLから生のHTMLデータを取得して、情報として解析できるようにしようとしています。私はすべての解析をソートして、生のHTMLを取得することができますが、私はそれを使用できるように、データがNSURLConnection
から到着している間にプログラムを停止させる方法を理解するのに苦労しています。現在のところ、私のプログラムは接続を騒がし、保持文字列はリクエストの直後まで空のままになります。私は "シンクロナス"接続を使用する必要があると信じていますが、これはUIをフリーズしてリクエストを処理しているので、これは嫌になります。私は、私は私のクラスからit.My現在のコードを解析することができます文字列urlData
に生のHTMLを得ることを望ん
urlData = [getURLClass getURL: @"http://www.google.co.uk"];
は下記....
です....このようにそれを呼び出すようにしようとしています//Create the request
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:urlString]];
//Open NSURLConnection with 'request'
[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
//If we receive something
if (data) {
//Pass and decode to string
receivedData = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
NSLog(@"Received HTML: %@", receivedData);
}
//Something went wrong
else {
// ToDO: Sort out any errors
}
}];
return receivedData;
ログを実行すると、「受信HTML:nil」と表示され、戻り値も空白ですが、しばらく待ってからクラスを再度呼び出すと、その前回の要求のデータが埋め込まれます。私は、データが
-(void) connectionDidFinishLoading
にして取得された。しかし、これは私にその私が「復帰」と呼ばれたメソッドからのデータできないという問題を残して別の方法を試してみました。私が言ったように、私はObjective-Cの新機能です。私は
ASIHTTPRequest
のような中断されたラッパーがあることを知っていますが、他の人のクラスを使用するより簡単な答えがあると確信しています。また、答えを見つけることができるかどうかを学ぶのに役立ちます。クラスが返す前にデータが受信されている間、プログラムを待機させるだけです。私はObj-Cで歩く前に実行しようとしているかもしれませんが、私のプログラムはウェブとやり取りできなければ無意味です。
ありがとうございます。 Plasma
が間違って起こっているのかを確認するだけでなく、エラーオブジェクトをロギングしてみました。 – amattn
私は何がうまくいかないかを知っています、変数が返された後にデータが満たされます。私はこの出来事を止める方法を知りたい。 – Plasma
私は解決策を見つけましたので、上記の[NSURLconnection sendAsynchronousRequestとReplace ... NSData * data = [NSURLConnection sendSynchronousRequest:requestResponse:&response error:&error]; – Plasma