2011-08-10 10 views
1

私は現在、非同期要求を行うときに20秒以上のタイムアウトを得ようとしています。NSURLConnectionとNSTIMERの問題

問題は、NSURLconnectionがメインスレッド上で実行されることです。したがって、NSTIMERを実行して渡された秒数をカウントすると、NSURLconnectionがメインスレッドをブロックしているためセレクタを起動しません。 NSURLconnectionはスレッドセーフであるため、別のスレッドで実行することはできますが、呼び出されていない代理人には奇妙な問題があります。以下は

は私snipletです:

NSURL *requestURL = [NSURL URLWithString:SERVER]; 
    NSMutableURLRequest *req = [[[NSMutableURLRequest alloc] initWithURL:requestURL] autorelease]; 
    theConnection = [[NSURLConnection alloc]initWithRequest:req delegate:self]; 


if (!timeoutTimer) { 
    NSLog(@"Create timer"); 
    timeoutTimer = [NSTimer scheduledTimerWithTimeInterval:TIMEOUT target:self selector:@selector(cancelURLConnection) userInfo:nil repeats:YES]; 

} 

答えて

2

NSURLConnectionの非同期メソッドが行うないメインスレッドをブロックします。タイマーが起動していない場合、これには他の理由があります。バックグラウンドスレッドで使用する際の問題は、バックグラウンドスレッドがデフォルトでランループを持たないことから発生します。

+0

ありがとうございました。あなたは実際に正しいです。非同期要求がメインスレッドをブロックすべきではありません。うーん、私は基本的に接続を作成し、次にタイマーを作成しています。 – user281300

+1

独自のタイマーを作成するのではなく、 'NSMutableURLRequest'の' setTimeoutInterval: 'メソッドを使うことを考えましたか? – omz

+0

それは動作しません。それは4-5分後にタイムアウトします。 – user281300

0

Thisは、単純なNSOperationを設定して別のスレッドでメソッドを実行する方法に関する素晴らしいチュートリアルです。私はあなたが言及したことに基づいてこれから始めるだろう。希望が助けてくれる!

+0

私のコードには何か間違ったことがあるはずです。 – user281300