2010-12-16 3 views
0

ご質問のノーベルネスレベルのため申し訳ありません。クラスのインスタンスを作成してデリゲートを割り当てる必要がありますか?

私はそれが

Add something like this to your NSURLConnection delegate

を言うthis答えは、しかし、質問、sendSynchronousRequest:returningResponse:error:のメソッドは、クラスメソッドである。見

デリゲートメソッドが正しく理解されている場合は、NSURLConnectionオブジェクトが開始されたときに指定されたデリゲートを使用します。

私はクラスのインスタンスがない場合、デリゲートを使用することはできません。私は正しく理解しましたか?

答えて

1

はい、正しいです。 Cocoaでは、デリゲートを割り当てるにはインスタンスが必要です。 NSURLConnectionの場合には、そのデリゲートは、クラス以来-initWithRequest:delegate:または+connectionWithRequest:delegate:

で開始された非同期要求を行う際に使用されることを想定しているも、彼らはまた、代表団を持っていることができることを考えることができたオブジェクトです。しかし、Objective-Cにはクラス変数の概念がないため、クラスはデリゲートを格納することができません(ただし、.mファイルでは標準C変数を使用できます)。とにかく、このコンセプトはCocoaでは使われていません。

+0

sendSynchronousRequest:returningResponse:error:をインスタンスで呼び出す必要がありますか?それは働くだろうか?あるいは、私は非同期要求で作業する必要がありますか? – Ovesh

+1

いいえ、 '+ sendSynchronousRequest:returningResponse:error:'はクラスメソッドです。インスタンス上で呼び出すことはできません。このメソッドはデリゲートでは機能しません。あなたはそれを呼び出すだけで、準備ができたら応答を返します(非常に速くて30秒かかります)。デリゲートメソッドを使用して接続の進行状況を知りたい場合は、非同期要求を作成する必要があります。 –

+0

したがって、私がリンクしている答えで提案されている解決策は、直接使用することはできません。実装は非同期要求を使用するように変更する必要があり、その場合にのみソリューションを使用できます。私が間違っているなら、私を修正してください。 – Ovesh

1

はいデリゲートは、要求を非同期で送信するときにイベントを処理するために使用されます。

+sendSynchronousRequest:returningResponse:error:メソッドを使用して同期要求を送信すると、デリゲートは使用されません。結果のデータと(オプションで)サーバーの応答とエラーのみが表示され、中間のロードイベントは認識されません(接続中に呼び出しスレッドもブロックされる進捗)。

関連する問題