iPhoneでURLからデータを受信するにはどうすればよいですか?
-
09-09-2019 - |
質問
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
}
理由としては次のことが考えられます。
私は宣言する
receivedData
アクション自体で。注釈には、他の場所で宣言する必要があると記載されています。どこに申告すればいいのでしょうか?コントローラーのプロパティとして宣言する必要がありますか?どのようにすることができます
[[NSMutableData data] retain]
URL が外部にあるので検索します。if{}
?
解決
NSURLConnection の initWithRequest:delegate を使用する場合:メソッドを実行すると、データ (他のものとともに) が一連のメソッド呼び出しでデリゲート オブジェクトに送信されます。これらのメソッドはすべてオプションであるため、デリゲート オブジェクトがメソッドを実装していない場合、接続オブジェクトはそれらをスキップします。
多数のメソッドがあるため、ここではすべてをリストしませんが、それらはすべて NSURLConnection ドキュメントで詳しく説明されています。受信したデータを取得するには、 -connection:didReceiveData を実装します。デリゲートオブジェクトについて。このメソッドは、新しく受信したデータを表す NSData オブジェクトを使用して、複数回呼び出される可能性があります。その後、それを既存の NSMutableData オブジェクトに追加するか、それを使ってその他の適切な操作を行うことができます。-connectionDidFinishLoading を実行すると、すべてのデータを受信したことがわかります。デリゲート オブジェクトに対して呼び出されます。
2 つの具体的な質問に答えるには:
はい、コントローラー オブジェクトのプロパティとして宣言する必要があります。また、接続オブジェクトが作成されるとすぐに接続は非同期でデータの読み込みを開始するため、NSURLConnection の initWithRequest:delegate: を呼び出す前に必ずオブジェクトを割り当てる必要があります。あるいは、 -connection:didReceiveResponse を実装することもできます。デリゲートで HTTP ステータスを確認し、データ オブジェクトを作成します。
可変データ オブジェクトは、設定したとおりに URL、接続、またはそのデータを見つけることができませんが、ここで説明した手順に従えば、データを受信したときにそれに追加し、使用することができます。接続が完了すると表示されます。