質問

Apple のドキュメントのコードを使用して HTTP 通信を行っています。URL には正常に接続できますが、サーバーからのデータの受信に失敗しました。

// create the request
NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://..."]
                        cachePolicy:NSURLRequestUseProtocolCachePolicy
                        timeoutInterval:60.0];
// create the connection with the request
// and start loading the data
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
if (theConnection) {
    // Create the NSMutableData that will hold
    // the received data
    // receivedData is declared as a method instance elsewhere
    NSMutableData *receivedData=[[NSMutableData data] retain];
} else {
    // inform the user that the download could not be made
}

理由としては次のことが考えられます。

  1. 私は宣言する receivedData アクション自体で。注釈には、他の場所で宣言する必要があると記載されています。どこに申告すればいいのでしょうか?コントローラーのプロパティとして宣言する必要がありますか?

  2. どのようにすることができます [[NSMutableData data] retain] URL が外部にあるので検索します。 if{}?

役に立ちましたか?

解決

NSURLConnection の initWithRequest:delegate を使用する場合:メソッドを実行すると、データ (他のものとともに) が一連のメソッド呼び出しでデリゲート オブジェクトに送信されます。これらのメソッドはすべてオプションであるため、デリゲート オブジェクトがメソッドを実装していない場合、接続オブジェクトはそれらをスキップします。

多数のメソッドがあるため、ここではすべてをリストしませんが、それらはすべて NSURLConnection ドキュメントで詳しく説明されています。受信したデータを取得するには、 -connection:didReceiveData を実装します。デリゲートオブジェクトについて。このメソッドは、新しく受信したデータを表す NSData オブジェクトを使用して、複数回呼び出される可能性があります。その後、それを既存の NSMutableData オブジェクトに追加するか、それを使ってその他の適切な操作を行うことができます。-connectionDidFinishLoading を実行すると、すべてのデータを受信したことがわかります。デリゲート オブジェクトに対して呼び出されます。

2 つの具体的な質問に答えるには:

  1. はい、コントローラー オブジェクトのプロパティとして宣言する必要があります。また、接続オブジェクトが作成されるとすぐに接続は非同期でデータの読み込みを開始するため、NSURLConnection の initWithRequest:delegate: を呼び出す前に必ずオブジェクトを割り当てる必要があります。あるいは、 -connection:didReceiveResponse を実装することもできます。デリゲートで HTTP ステータスを確認し、データ オブジェクトを作成します。

  2. 可変データ オブジェクトは、設定したとおりに URL、接続、またはそのデータを見つけることができませんが、ここで説明した手順に従えば、データを受信したときにそれに追加し、使用することができます。接続が完了すると表示されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top