0

全て、

これは非常に簡単に思えるかもしれませんが、私はすでに URL ローディング システム プログラム ガイドとさまざまな NSURL.... クラスを調べましたが、答えが見つかりませんでした。

パーティースポットを予約するために、アプリからウェブサイトへの簡単な呼び出しを実行しようとしています。

NSString *path=[NSString stringWithFormat:@"http://www.myparty123.com/ireservedURL.asp?Nickname=%@&Seat=%i&Email=%@&Currentparty=%i",john,5432,john@yahoo.com,6598];
NSURL* reservationURL =[NSURL URLWithString:path];
NSData *call= [NSData dataWithContentsOfURL:reservationURL];   

これは簡単な方法のように見えましたが、「call」変数を使用していないという警告が表示されます。また、データが返されない NSData を使用して呼び出しを行うのはやり過ぎのようです。

しかし、NSURLRequest を作成して NSURLConnection を開始し、そのリクエストでデリゲートを実装するのもやり過ぎのようです。

何が欠けていますか。

ありがとうKMB

4

2 に答える 2

5

NSURLConnection には sendSynchronousRequest:returningResponse:error: というメソッドがあり、NSURLConnection デリゲートを実装せずに URL から NSData をダウンロードできます。

したがって、コードを次のように書き直すことができます。

NSString *path = [NSString stringWithFormat:@"http://www.myparty123.com/ireservedURL.asp?Nickname=%@&Seat=%i&Email=%@&Currentparty=%i",@"john",5432,@"john@yahoo.com",6598];
NSURL *url = [NSURL URLWithString:path];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

役に立たない変数にデータを割り当てていないため、警告は表示されなくなります。応答が成功したかどうかを知りたい場合は、NSURLResponse 変数を作成して sendSynchronousRequest メソッド呼び出しに渡すことができます。

注意すべきことは、このメソッドは、呼び出したスレッドをブロックするということです。したがって、UI スレッドでこれを呼び出し、ダウンロードに 10 秒かかる場合、ユーザーはアプリを操作できなくなります。NSURLConnection デリゲートを実装するか、sendAsynchronousRequest:queue:completionHandler: メソッドを使用しても、それらが使用されているスレッドはブロックされません。

このコードを NSInvocationOperation 内にラップして NSOperationQueue に追加するか、 AFNetworking などを調べることもできます

于 2012-09-12T15:36:51.520 に答える
0

知る限り、リクエストを送信する最も簡単な方法は+ (id)stringWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc error:(NSError **)errorNSString

于 2012-09-12T16:00:28.033 に答える