我有發送HTTP POST
連接的代碼。我希望該方法等待,直到從服務器獲得響應才能繼續。我這樣做的原因是因爲我正在將新代碼(異步發佈與舊同步發佈)集成到我們的應用程序中,並且我正在尋找整個應用程序中的最小更改。等待NSURLConnection
舊的方法如下:
-(NSData*) postData: (NSString*) strData;
該應用程序將調用它,併發送一個strData
對象,它會鎖定在主線程,直到它得到的東西回來。這效率不高,但效果很好,但由於超時限制,我不得不改變它。
所以我的新方法(張貼在這裏完整的方法)如下:
-(NSData*) postData: (NSString*) strData
{
//start http request code
//postString is the STRING TO BE POSTED
NSString *postString;
//this is the string to send
postString = @"data=";
postString = [postString stringByAppendingString:strData];
NSURL *url = [NSURL URLWithString:@"MYSERVERURL"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
NSString *msgLength = [NSString stringWithFormat:@"%d", [postString length]];
//setting prarameters of the POST connection
[request setHTTPMethod:@"POST"];
[request addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request addValue:msgLength forHTTPHeaderField:@"Content-Length"];
[request addValue:@"en-US" forHTTPHeaderField:@"Content-Language"];
[request setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]];
[request setTimeoutInterval:20]; //one second for testing purposes
NSLog(@"%@",postString);
NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];
[connection start];
//end http request code
return receivedData; //this is set by a delegate somewhere else in the code
}
它發送代碼很好,但當然(和預期),沒有收到它足夠快,是正確返回。
你有什麼建議我可以這樣做:「停止」該方法等待返回任何東西,直到收到某些東西?我已經嘗試設置一個等待循環,等待BOOL
,當收到所有數據時設置爲YES
,但是該循環阻止了代碼的發送。我也嘗試將此方法的內容放入另一個方法中,並將其稱爲performSelectorInBackground
,但當然,這也不起作用。我正在用盡想法,我非常感謝他們的幫助。
嗯,我試圖保持目前的代碼(上圖),因爲它是因爲我需要實現小於240秒超時,只能用異步連接發生,而不是一個同步連接。 – Baub