1
我正在使用NSURLConnection調用請求JSON數據的服務器。NSURLConnection響應不完整
出於某種原因,我收到了部分回覆。如果我通過瀏覽器訪問網址,則回覆是正確的。奇怪的是,它只發生在某個時間。所以我很難調試這個問題。
然後,當因爲響應是不完整的,我得到以下錯誤: 錯誤域= NSCocoaErrorDomain代碼= 3840「的操作無法完成(可可錯誤3840)。」(約字符0的值無效。 )UserInfo = 0xa4634a0 {NSDebugDescription =字符0周圍的值無效。} { NSDebugDescription =「字符0周圍的值無效。 }
我想這也可能是它自己的服務器的問題。這裏是我的代碼:
-(void) getShareHistory:(NSString *)range paging:(NSInteger *)page{
NSString *post = [NSString stringWithFormat:@"range=%@&paging=%@",
range,
[NSString stringWithFormat:@"%ld",(long)page]];
NSString *url = [NSString stringWithFormat:@"http://www/domai.com/handle_share_links.php?action=history"];
NSData *post_data = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d", [post_data length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setCachePolicy:NSURLRequestUseProtocolCachePolicy];
[request setURL:[NSURL URLWithString:url]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:post_data];
self.shareHistoryConn = [[NSURLConnection alloc] initWithRequest:request delegate:self];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)response{
NSString *strData = [[NSString alloc]initWithData:response encoding:NSASCIIStringEncoding];
NSLog(@"response %@",strData);
NSError *jsonParsingError = nil;
if(connection == self.shareHistoryConn)
{
NSArray *data = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingAllowFragments error:&jsonParsingError];
if(!jsonParsingError)
{
[[self delegate] onGetShareHistorySuccess:data];
}else{
[[self delegate] onGetShareHistoryFailed:jsonParsingError];
}
}
在此先感謝。
欲瞭解更多信息,請參閱我的書的相關部分:http://www.apeth.com/iOSBook/ch37.html#_http_requests – matt
這正是問題所在。再次感謝。 相反,我會在didReceiveResponse self.receivedData = [[[NSMutableData alloc] initWithCapacity:0]中將對象的初始化添加到您的答案中。 – Rico
不是一個壞主意,謝謝。如果你打算這麼做,順便說一下,你可以直接說'[NSMutableData new]'。 – matt