2012-05-04 311 views
1

我有一個服務器類具有NSURLConnection的委託方法。我有另一個名爲SendRequest的類,它將NSMutableURLRequest發送到服務器類。 在服務器類我有兩種方法稱爲NSURLConnection委託方法沒有被調用

- (void)executeAsync:(NSMutableURLRequest)urlRequest timeOutInterval:(int)timeOut 
{ 
    _urlConnection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self startImmediately:YES];]; 
} 

- (void)executeSync:(NSMutableURLRequest)urlRequest 
{ 
    NSData* respData = [NSURLConnection sendSynchronousRequest:urlRequest      returningResponse:&response error:&error]; 

} 

一切工作正常,直到在這裏,我能夠調用上面從sendRequest將類,它調用委託方法executeAsync方法。

現在我在SendRequest類中添加了一個新方法,它將調用Server類中的executeRequest方法。

- (void)executeRequest:(NSMutableURLRequest)urlRequest 
{ 
    _urlConnection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self startImmediately:YES];]; 
} 

這次,我被困了。 executeRequest方法正在調用,但它在處理URL請求時未調用其委託方法。我在這裏被打了很多小時。

一切似乎都是正確的,我發送的urlRequest與我以前發送的方式相同。但我不知道爲什麼它不起作用。隨時發表評論,但請幫助我。我真的很擔心

編輯:

我需要發佈到服務器的請求,並得到迴應。如果我嘗試同步它工作正常,但它阻止主線程。這就是我正在尋求異步的原因。通過委託方法,我試圖獲取響應數據。

+0

這裏您的代碼實際上並不表明你調用[_urlConnection開始。我假設你在某個地方這樣做? – SteveB

+0

我編輯了我的問題。請檢查它 – Perseus

+0

他正在使用startImmediately選項。 –

回答

-1

我終於解決了。希望這會有助於一個人。我將代碼清理並正確聲明瞭方法,最後在創建類的對象時,我必須使用initwithDelegate:self。最後調用NSURLConnection委託方法。

1

我認爲您對系統的描述與發佈的代碼不符,並且它解釋了您描述的問題。 SendRequest類應該依賴Server類來執行服務器請求。

它看起來像SendRequest類將連接委託設置爲self。我猜所有這些委託方法都是在Server類上實現的。

嘗試做你的描述建議什麼....

// SendRequest.m 

- (void)executeRequest:(NSMutableURLRequest)urlRequest 
{ 
    // however you get ahold of your server... 
    Server *myServer = [Server sharedInstance]; 

    // let it do the work. it has the delegate methods 
    [myServer executeAsync:urlRequest]; 
} 

另外,該sendRequest將代碼可以保持原樣,但委託重新設置爲服務器類(的實例,假設這就是委託方法實施)。我認爲這第二個想法更糟,因爲服務器已經知道如何發起請求。

+0

其實我正在準備一個大的urlRequest,這就是爲什麼我只發佈了原型。你是對的。第二個想法更糟。實際上我試着再次調用相同的executeAsync方法。它正在調用,但不調用委託方法。所以我爲此創建了一個新的方法,我的意思是executeRequest – Perseus

+0

即使我檢查過的對象是零,一切都很完美。 – Perseus

+0

請再次檢查我的問題,我在最後提到了我正在嘗試做的事情。 – Perseus

-1

設置NSURLConnectionDelegate到您的.h

然後運行下面的代碼中的.m功能

NSURLConnection *connection = [[NSURLConnection alloc] 
           initWithRequest:request 
             delegate:self startImmediately:NO]; 

[connection scheduleInRunLoop:[NSRunLoop mainRunLoop] 
         forMode:NSDefaultRunLoopMode]; 
[connection start]; 
相關問題