didReceiveData没有在Xcode中调用

时间:2012-04-05 20:07:13

标签: iphone objective-c xcode web-services soap

NSURL委托didReceiveData方法没有被调用,但didReceiveResponse和didFinishLoading被调用。我经历了很多在线帖子,但无法得到任何关于我没有收到任何数据的线索。有人能告诉我我在代码中发生了什么。任何帮助表示赞赏。这是我的代码:

- (IBAction)buttonClicked:(id)sender {
NSString *soapMsg = 
[NSString stringWithFormat:
 @"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
 "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xlmns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n"
 "<soap:Body>\n"
 "<GetAllCarsJson xmlns=\"http://cscserver2.carrollu.edu/tshah2/\">\n"
 "</GetAllCarsJson>\n"
 "</soap:Body>\n"
 "</soap:Envelope>"]; 

//---print it to the Debugger Console for verification---
//NSLog(@"%@",soapMsg);
NSURL *url = [NSURL URLWithString:@"http://cscserver2.carrollu.edu/tshah2/CarService.asmx"];
NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];

//---set the headers---
NSString *msgLength = [NSString stringWithFormat:@"%d",[soapMsg length]];
[req addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[req addValue:@"http://cscserver2.carrollu.edu/tshah2/GetAllCarsJson" forHTTPHeaderField:@"SOAPAction"];
[req addValue:msgLength forHTTPHeaderField:@"Content-Length"];

//---set the HTTP method and body---
[req setHTTPMethod:@"POST"];
[req setHTTPBody: [soapMsg dataUsingEncoding:NSUTF8StringEncoding]];

//[activityIndicator startAnimating];
conn = [[NSURLConnection alloc] initWithRequest:req delegate:self];
[conn start];

NSLog(@"Connection = %@", conn);
if (conn) 
{
    //webData = [[NSMutableData data] ];
    webData = [[NSMutableData alloc] initWithCapacity:2048];
    //[[NSMutableData data] retainArguments];
}
}

- (void) connection:(NSURLConnection *) connection didReceiveResponse:(NSURLResponse *)response
{
    NSLog(@"soapMsg1: %d", [webData length]);
    //webData = [[NSMutableData alloc] initWith:
    [webData setLength:0];
}

- (void) connection:(NSURLConnection *) connection didReceiveData:(NSData *)data
{
    NSLog(@"DONE1111");
    [webData appendData:data];
    //NSLog(webData);

}

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

- (void) connectionDidFinishLoading:(NSURLConnection *) connection
{
    NSLog(@"DONE. Received Bytes: %d", [webData length]);
    NSString *theXML = [[NSString alloc] initWithBytes:[webData mutableBytes] length:             [webData length] encoding:NSUTF8StringEncoding];

    //shows the XML
    NSLog(theXML);
    //[theXML release];
    //[activityIndicator stopAnimating];
    //[connection release];
    connection = nil;
    webData =nil;

}

- (void) dealloc
{
    //[activityIndicator release];
    //[xmlParser release];
    //[soapResults release];
    //[super dealloc];
}

1 个答案:

答案 0 :(得分:0)

检查http响应代码。 使用NSHTTPURLResponse类的 - (NSInteger)statusCode方法。是200还是其他?