同じことを繰り返し言っているたくさんのメッセージを読みました。NSURLConnectionを使用すると、デリゲートメソッドは呼び出されません。Appleのドキュメントが不完全で、非推奨のメソッドを参照していることは理解しています。これは残念ですが、解決策が見つからないようです。
リクエストのコードはそこにあります:
// Create request
NSURL *urlObj = [NSURL URLWithString:url];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:urlObj cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30];
[request setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"];
if (![NSURLConnection canHandleRequest:request]) {
NSLog(@"Can't handle request...");
return;
}
// Start connection
dispatch_async(dispatch_get_main_queue(), ^{
self.connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES]; // Edited
});
...そしてdelegateメソッドのコードはここにあります:
- (void) connection:(NSURLConnection *)_connection didReceiveResponse:(NSURLResponse *)response {
NSLog(@"Receiving response: %@, status %d", [(NSHTTPURLResponse*)response allHeaderFields], [(NSHTTPURLResponse*) response statusCode]);
self.data = [NSMutableData data];
}
- (void) connection:(NSURLConnection *)_connection didFailWithError:(NSError *)error {
NSLog(@"Connection failed: %@", error);
[self _finish];
}
- (void) connection:(NSURLConnection *)_connection didReceiveData:(NSData *)_data {
[data appendData:_data];
}
- (void)connectionDidFinishDownloading:(NSURLConnection *)_connection destinationURL:(NSURL *) destinationURL {
NSLog(@"Connection done!");
[self _finish];
}
ここではエラーチェックはそれほど多くありませんが、いくつか確認しました。
- 何が起こっても呼び出されること
didReceiveData
はないので、データは取得されません - ...しかし、データは転送されます(私はを使用してチェックしました
tcpdump
) - ...そして他のメソッドは正常に呼び出されます。
NSURLConnectionDownloadDelegate
の代わりにを使用するとNSURLConnectionDataDelegate
、すべてが機能しますが、ダウンロードしたファイルを保持できません(これは既知のバグです)- 不正なメモリ管理によって、要求が完了する前に割り当てが解除されない
- インターネット上のどこかで標準のHTMLページをURLとして使用しても、何も変わりません。
- リクエストはメインキューからキックオフされます
最終的に、これらのリクエストは自分のライブラリに含まれることになっているため、サードパーティのライブラリを使用したくありません。依存関係を最小限に抑えたいと思います。必要に応じて直接使用しますCFNetwork
が、それはあなたが知っていることで大きな苦痛になります。
あなたが何か考えを持っているなら、それは大いに役立つでしょう。ありがとう!