我這裏有一些代碼:NSURLConnection的掛在recieving沒有太大的量OD數據
(...)
NSURLConnection *theConnection = [[NSURLConnection alloc]
initWithRequest:theRequest delegate:self];
if(theConnection)
{
webData = [[NSMutableData data] retain];
}
和委託方法:
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
NSLog(@"zero");
[webData setLength: 0];
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
NSLog(@"got %d", [data length]);
[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]);
[connection release];
[webData release];
}
它的工作原理相當不錯,直到更多的數據已經到來。 比NSURLConnection「停止工作」(沒有錯誤,沒有例外,沒有退出)。我仍然可以使用我的應用程序。 我注意到這個問題開始時didReceiveData
被在連接過程中調用一次以上。
它看起來像一步步從調試器:
1. I call theRequest
2. Delegate call didReceiveResponse
2010-06-21 18:10:16.708 MyApp的[9477:207]爲零
3. Delegate call didReceiveData
2010-06-21 18:10:16.709 MyApp的[9477:207]得到6912
(GDB)繼續
4. Delegate call didReceiveData (once again)
2010-06-21 18:10:18.027 MyApp的[9477:207]得到114067
(GDB)繼續
--> and here is the problem <--
主循環繼續,沒有斷點,connectionDidFinishLoading
不被調用。 didRecieveData只被調用一次就一切正常。
5. Delegate call didFailWithError (after 5 min!)
2010-06-21 18:15:18.041 MyApp的[9477:207]誤差theConenction 連接失敗!錯誤 - 操作無法完成。由對等
(GDB)連接復位繼續
=============== UPDATE ================= ===
最後,我發現了一件重要的事情:真正的問題是遠程主機有時(即大量的數據)沒有以適當的方式完成連接,所以委託connectionDidFinishLoading不能被調用, 5分鐘後遠程主機重置連接。
有沒有人的問題太多,可以幫助?
您是否嘗試從另一臺服務器加載數據的一大塊問題?這個特定的服務器是相關的嗎?使用POST請求時,iPhone SDK的默認計時器非常長。無論你輸入什麼,它都會保持很長時間。我最終做出了自己的計時器。 – krzyspmac 2010-12-22 16:17:27