2009-08-07 43 views
2

,看一下這個代碼片段: -「 - (無效)連接:(NSURLConnection的*)連接didReceiveData:(NSData的*)數據」 不叫

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{    
    [webData setLength: 0];   
} 



-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 

{ 
    NSLog(@"Recieving Data..."); 
    [webData appendData:data]; 

} 



-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
{ 
    NSLog(@"ERROR with theConenction"); 
    [connection release]; 
    [webData release]; 
} 

-(void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    NSLog(@"DONE. Received Bytes: %d", [webData length]); 
    NSLog(theXML); 


} 

我打電話一個SOAP的Web service.There沒有錯誤或警告顯示在我的代碼中。 當我通過Safari瀏覽器訪問網絡服務時,它工作正常。但是,當我嘗試通過我的代碼嘗試 時出現問題。 一切工作正常,但connection:didRecieveData不會被調用。 因此,我在webData變量中沒有收到數據。這webData是一個NSMutableData對象。 這個問題似乎是愚蠢的,但任何一個與任何答案....

謝謝大家。

回答

4

我懷疑你有內存管理問題。我可能是錯誤的,但我相信即使:

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

將無法​​正常工作,因爲connection將在包含方法結束被釋放,當connection超出範圍。確保NSURLConnection *connectionNSMutableData *data被宣佈爲成員變量凡你正在這樣做,並且你allocinit他們適當。我的代碼通常是這樣的:

NSURLRequest *request = [NSURLRequest requestWithURL:url 
              cachePolicy:NSURLRequestReloadIgnoringLocalCacheData 
              timeoutInterval:30.0]; 
    // cancel any old connection 
    if(connection) { 
     [connection cancel]; 
     [connection release]; 
    } 
    // create new connection and begin loading data 
    connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
    if(connection) { 
     // if the connection was created correctly, release old data (if any), and alloc new 
     [data release]; 
     data = [[NSMutableData data] retain]; 
    } 

此外,releasedealloc的連接和數據。良好的措施,release並將它們設置爲nildidFailWithErrordidFinishLoading盡頭:

[connection release]; 
connection = nil; 
[data release]; 
data = nil; 

運氣好;我已經做了這一百萬次,讓我知道如果你不能得到它的工作。

+0

感謝米奇.. 我解決了它.. 有我的SOAP消息缺少空間.. – SocialCircus 2009-08-08 14:18:47

+0

感謝米奇, 但我仍然有同樣的問題,它不工作。我在瀏覽器中測試了URL,在那裏加載了它。你能幫我嗎? – smakstr 2010-05-13 05:13:08

+0

沒有什麼會被釋放,只是因爲指向它的變量離開了獨家新聞!連接對象不需要保留,並且應該在代理的回調完成後釋放。 – VdesmedT 2010-09-26 05:56:16

2

你不會碰巧在一個線程中調用NSConnection嗎?如果你現在正在發生的事情是線程在NSConnection及其代表完成之前就終止了,那麼它就會在沒有錯誤的情況下彈出。

對此的解決辦法是在this線程

0

你不didFailWithError收到任何錯誤消息要麼?有點愚蠢的建議,但你確定你正在設置適當的NSURLConnection代表嗎?

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

有時候這是小事。

另一個想法是放入一個像ASIHTTPRequest這樣的工具包,看它是否能夠通過它們。

0

如果試圖從另一個線程啓動NSURLConnection,也可能會出現問題。 如果您還沒有爲其定製Run Loop,請在主線程上調用方法[connection start]。

相關問題