web-dev-qa-db-ja.com

NSURLConnectionデリゲートメソッドは呼び出されません

GETリクエストを使用してサーバーと通信するための簡単なNSURLConnectionを作成しようとしています。接続は正常に機能しますが、NSURLConnectionのデリゲートメソッドは呼び出されません。

これが何をしているのかです:

NSString *post = [NSString stringWithFormat:@"key1=%@&key2=%@&key3=%f&key4=%@", val1, val4, val3, val4];

NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease] ;

[request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://www.domain.com/demo/name/file.php?%@", post]]];

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[connection start];

次のデリゲートメソッドを実装しましたが、どれも呼び出されません。

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
    NSLog(@"did fail");
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
    NSLog(@"did receive data");
}
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
    NSLog(@"did receive response ");
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
    NSLog(@"did finish loading");
    [connection release];
}

何か不足していますか?

56
Manish Ahuja

メインスレッドで操作を実行してみてください。

NSURLConnection * connection = [[NSURLConnection alloc] 
                                initWithRequest:request
                                       delegate:self startImmediately:NO];

[connection scheduleInRunLoop:[NSRunLoop mainRunLoop] 
                      forMode:NSDefaultRunLoopMode];
[connection start];
136
Art

バックグラウンドスレッドでこれを呼び出していますか?バックグラウンドスレッドでこれを実行している場合、デリゲートを呼び出す前にスレッドが終了している可能性があります。

22
visakh7

受信した応答の長さをチェックして、0バイトのデータを取得しないようにしてください。

1
sanjeev sharma

要求がメインスレッドから呼び出されたかどうかを確認する以外に、実行時間をシステムに返すかどうかを確認できます(「main」を終了した場合)。デリゲートが呼び出されるまでループに留まるテストコードがいくつかありました。メインスレッドでデリゲートを呼び出すためにシステムが何かを行う必要があるため、デリゲートは呼び出されません。

1
user3292568