0

目前,我正在做這個:異步數據呼叫和CoreAnimation

 NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 

,然後我更新UI和運行很多動畫的顯示,我剛剛收到的數據。

但是我現在試圖使用異步請求加載信息,而上述方法鎖定主線程。

任何想法?我已經嘗試過建立一個NSOperationQueue和使用:

   NSData *responseGBP = [NSURLConnection sendAsynchronousRequest:requestGBP queue:operationQueue completionHandler:nil]; 

但是我得到這個錯誤:初始化「的NSData * __強烈的」不兼容類型「無效」

你的天才可以幫助我的表現?

+0

對不起,我粘貼了錯誤的代碼,請再次檢查,其實是一個不同的錯誤信息,如果您可以重新閱讀這個問題,那很棒。 – Woodstock

+0

這只是因爲該方法返回void,因爲* NSData *對象在完成處理程序中傳遞。因此,只需鍵入* [NSURLConnection sendAsynchronousRequest:requestGBP queue:operationQueue completionHandler:nil]; *並在完成處理程序中初始化* responseBGP *。 –

+0

好的,那麼我該如何設置NSData,你能給我這個調用的語法嗎? – Woodstock

回答

3

sendAsynchronousRequest:隊列:completionHandler:返回void,所以你不能立即初始化NSData的對象,你需要等待響應,這是異步的。所以只是做這樣的事情:

[NSURLConnection sendAsynchronousRequest:requestGBP queue:operationQueue completionHandler: ^(NSURLResponse* response, NSData* data, NSError* error) 
{ 
    responseBGP= data; 
    // Additional code handling the result goes here, not after the call. 
}]; 
// Here responseBGP may be nil as well, you don't know when the concurrent 
// operation will finish. 

注意,你已經調用此方法後,是不是說,responseBGP將被初始化,因爲該方法是異步的,在隊列中執行。

+0

感謝您的上述信息!如果我有多個這樣的請求,我是否必須嵌套它們,或者可以一個接一個地執行它們嗎? – Woodstock

+0

感謝您的時間! – Woodstock

+0

對於多個請求,事情可能會變得複雜,所以我建議分開處理它們。請務必記住,如果更新UI,則需要在主線程上執行此操作(* performSelectorOnMainThread:withObject:waitUntilDone:*是您的朋友)。 –