次の呼び出しを使用して、iPhone アプリで非同期 POST 要求を作成しています。
[NSURLConnection connectionWithRequest:req delegate:self];
リクエストは問題なくサーバーに届いているように見えますが、どのデリゲート メソッドもヒットしません。私は実装しました:
- (void)connection:(NSURLConnection *)connection didCancelAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
- (void) connectionDidFinishLoading:(NSURLConnection *)connection
と
- (void) connection:didFailWithError:(NSURLConnection *)connection
これらのメソッドのログ メッセージは表示されません。connectionWithRequest:delegate: のドキュメントには次のように書かれています。
デリゲート
接続のデリゲート オブジェクト。デリゲートは、ロードが進行するにつれてデリゲート メッセージを受け取ります。デリゲートへのメッセージは、このメソッドを呼び出すスレッドで送信されます。接続が正しく機能するには、呼び出しスレッドの実行ループがデフォルトの実行ループ モードで動作している必要があります。
メインスレッドから呼び出しが行われていると思います(新しいスレッドを明示的に開始しなかった場合、すべてが1つのスレッドで実行されるという仮定は正しいですか?)、これでスレッドをチェックしました:
CFRunLoopRef loop = CFRunLoopGetMain();
CFStringRef modeString = CFRunLoopCopyCurrentMode(loop);
NSLog(@"The main loop is running in mode: %@", modeString);
次のコンソール出力が作成されます。
2009-09-13 13:32:05.611 Stock Footage[686:20b] メイン ループは次のモードで実行されています: kCFRunLoopDefaultMode
つまり、デフォルトの実行ループ モードにあるようです。デリゲート メソッドがヒットしない理由を教えてくれる、他に確認すべきことはありますか? デリゲートは、リクエストが完了する前に死ぬわけではありません。
更新: CFRunLoopGetCurrent にはモード kCFRunLoopDefaultMode があります。
更新 (東部標準時午後 5 時 40 分): そうですね、コールバックを開始するために initWithRequest:delegate: startImmediately を使用するように切り替えましたが、実際にデリゲートを起動する connectionWithRequest:delegate の例を見たいと思います。 .