2011-08-10 53 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異步方法做阻塞主線程。如果你的計時器沒有開火,這有其他原因。你的問題,用它從一個事實,即後臺線程沒有默認情況下,runloop後臺線程的結果。

+0

感謝。你其實是對的。異步請求不應阻塞主線程。嗯,我基本上創建一個連接,然後創建一個計時器。 – user281300

+1

您是否考慮過使用'NSMutableURLRequest'的'setTimeoutInterval:'方法,而不是創建自己的計時器? – omz

+0

你不行。它只是超時4-5分鐘後 – user281300

0

This是如何建立一個簡單的NSOperation上運行一個單獨的線程的方法有很大的教程。我會從你提到的基礎開始。希望有所幫助!

+0

我認爲我的代碼中一定有其他錯誤。 – user281300