2012-08-29 35 views
0

我想通過使用NSURLConnection的HTTP獲取圖像。我在後臺執行選擇iOS的ObjC網絡和選擇器在後臺

[self performSelectorInBackground:@selector(loadingDaemon) withObject:nil]; 

,我做這個

NSString *fullImageURL = [NSString stringWithFormat:@"http://%@/%@", baseURL, currentlyLoadingImage]; 
NSURL *imgURL = [NSURL URLWithString:fullImageURL]; 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:imgURL]; 
request.timeoutInterval = 10; 
NSURLConnection *newConnection = [NSURLConnection connectionWithRequest:request delegate:self]; 

我設置NSURLConnection的」授人以自我和實現方法

connection:didReceiveResponse: 
connection:didReceiveData: 
connection:didFailWithError: 
connectionDidFinishLoading: 

此外,我記錄每一個方法調用和條件分支。但是上面的4個函數從來都不會被調用。請你能解釋我爲什麼?

+0

我懷疑你正在創建的URL包含特殊字符而沒有被轉義,所以它是無效的。 – 2012-08-29 20:05:15

+0

如果在方法結束時說'[[NSRunLoop currentRunLoop]運行]'會發生什麼? –

+1

只是你知道,使用NSURLConnection的異步加載的一個主要原因是你可以在主線程上完成所有這些工作,而不必將其作爲背景。 –

回答

0

你正在創建的NSURLConnection是在後臺執行這些操作,所以不應該有必要在後臺執行它,也是它不適合你的原因。你可以使用NSURLConnection sendAsynchronousRequest來調用你的選擇器,或直接調用該函數。

+0

問題是我必須在其他線程運行我的ImageLoader類,它像守護程序一樣工作。如果我在後臺執行NSURLConnection請求,是否正在等待回覆在與守護進程相同的線程中運行? – JINGE

+0

我不認爲他們會互相影響,但如果他們這樣做,然後運行你有什麼作爲同步的請求,將工作。你只是不能做一個在後臺啓動的異步請求。 – rooster117