2010-12-16 32 views
0

對不起,這個問題的noobness級別。我是否必須創建一個類的實例才能爲其指派一個委託?

我看到this答案,它說:

Add something like this to your NSURLConnection delegate

然而,問題sendSynchronousRequest:returningResponse:error:的方法,是一種類方法。如果我正確理解委託方法,他們使用在啓動NSURLConnection對象時指定的委託。

因此,如果我沒有該類的實例,則不能使用委託。我理解正確嗎?

回答

1

是的,你是對的。在Cocoa中,分配一個委託需要一個實例。在NSURLConnection的情況下,其代表是應該做的是與-initWithRequest:delegate:+connectionWithRequest:delegate:

發起由於類的異步請求時使用的也是對象也可以設想,他們也可以有代表。然而,由於在Objective-C中沒有類變量的概念,類沒有地方存儲它的委託(它可以在其.m文件中使用標準C變量)。無論如何,這個概念並沒有在可可中使用。

+0

這是否意味着我需要在實例上調用sendSynchronousRequest:returningResponse:error:?這甚至會工作嗎?或者我是否被迫使用異步請求? – Ovesh 2010-12-16 14:05:30

+1

不,'+ sendSynchronousRequest:returningResponse:error:'是一個類方法。你不能在實例上調用它。該方法不適用於委託。您只需調用它,並在準備就緒時返回響應(可能非常快,可能需要30秒)。如果要使用委託方法來了解連接的進度,則需要創建一個異步請求。 – 2010-12-16 14:20:30

+0

因此,我所鏈接的答案中建議的解決方案無法直接使用。該實現需要更改爲使用異步請求,只有這樣才能使用該解決方案。如果我錯了,請糾正我。 – Ovesh 2010-12-16 14:50:27

1

當您異步發送請求時,是使用代理來處理事件。

在使用+sendSynchronousRequest:returningResponse:error:方法發送同步請求時,不使用委託 - 您只能得到結果數據和(可選)服務器響應和錯誤,並且不知道中間加載事件(並且請記住,連接處於進展)。

相關問題