0

元の質問への回答では、次のコードを使用しています。

NSURLRequest *theRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:self.urlNameInput.text] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
[NSURLConnection sendAsynchronousRequest:theRequest queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *connection, NSData *data, NSError *error){...}];

私の元のコードは機能しませんでしたが、次のようになりました。私のコードでは、一連のデリゲート メソッド (connection:didReceiveResponse:、connection:didReceiveData:、connection:didFailWithError:、および connectionDidFinishLoading:) が Apple Docs で提案されているものを使用しました。

NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:self.urlNameInput.text] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
         if (theConnection) {
         receivedData = [NSMutableData data] ;
         } else {
         // Inform the user that the connection failed.
         NSLog(@"Their is an error with that URL.");
         };

デリゲート メソッドは提案されたコードと互換性がありますか? 互換性がある場合、どのようにそれらを提案されたコードに統合できますか?

4

1 に答える 1

3

どちらか一方を使用します。

質問の最初のコードは、デリゲートメソッドを使用していません。代わりに、完了ハンドラーですべてを実行します。データを取得するか、エラーが発生します。データの追加やリダイレクトの処理を処理する必要はありません。

より詳細な制御が必要な場合は、適切なデリゲートメソッドのセットとともに古いフォームを使用する必要があります。

完了ハンドラーバージョンははるかに単純であり、デリゲートバージョンの柔軟性が必要でない限り使用する必要があります。

于 2013-03-03T03:58:23.243 に答える