0

我是堆栈溢出的新手。我正在通过我的 iPhone 应用程序进行 Web 服务连接,我对 iPhone 开发非常陌生,所以我通过以下链接尝试了一个示例,

http://www.leesilver.net/1/post/2011/08/calling-a-web-service-from-objective-c.html

但我收到以下错误,"property 'data' not found on object of type 'AppDelegate'" 在 NSString *query = AppDelegate.data; 行

以下是我的完整代码,

-(IBAction)btnDone:(id)sender{

    recordResults = FALSE;
    NSString *query = AppDelegate.data; // Getting the error at this line
                                        //property 'data' not found on object of type 'AppDelegate'        
    query = [query stringByReplacingOccurrencesOfString:@"<" withString:@"&lt;"];
    query = [query stringByReplacingOccurrencesOfString:@">" withString:@"&gt;"];

    NSString *soapMessage = [NSString stringWithFormat:
                             @"<?xml version=\"1.0\" encoding=\"utf-8\"?>"
                             "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
                             "<soap:Body>\n"
                             "<HelloWorld xmlns=\"http://tempuri.org/\">\n"
                             "<xmlIn>\n"
                             "<![CDATA[%@]]>\n"
                             "</xmlIn>\n"
                             "</HelloWorld>\n"
                             "</soap:Body>\n"
                             "</soap:Envelope>\n", query ];

    NSLog(@"%@",soapMessage);
    NSURL *url = [NSURL URLWithString:@"http://www.xxxxxxx.net/service.asmx"];
    NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];
    NSString *msgLength = [NSString stringWithFormat:@"%d",[soapMessage length]];
    [theRequest addValue:@"text/xml" forHTTPHeaderField:@"Content-Type"];
    [theRequest addValue:@"http://www.xxxxxxxxxxx.net/service.asmx?op=HelloWorld" forHTTPHeaderField:@"SOAPAction"];
    [theRequest addValue:msgLength forHTTPHeaderField:@"Content-Type"];
    [theRequest setHTTPMethod:@"POST"];
    [theRequest setHTTPBody:[soapMessage dataUsingEncoding:NSUTF8StringEncoding]];
    NSLog(@"Message Length..%@",msgLength);

    NSURLConnection *theConnection = [[NSURLConnection alloc]initWithRequest:theRequest delegate:self];

    if(theConnection)
    {
        conWebData = [NSMutableData data];
    }
    else
    {
        NSLog(@"theConnection is NULL");
    }

}

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    [conWebData setLength:0];
}
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    NSLog(@"ERROR with theConnection");
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSLog(@"DONE. Received Bytes:%d",[conWebData length]);
    NSString *theXML = [[NSString alloc]initWithBytes:[conWebData mutableBytes] length:[conWebData length] encoding:NSUTF8StringEncoding];
    NSLog(@"%@",theXML);

    xmlParser = [[NSXMLParser alloc]initWithData:conWebData];
    [xmlParser setDelegate:self];
    [xmlParser setShouldResolveExternalEntities:YES];
    [xmlParser parse];
}

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    if([elementName isEqualToString:@"HelloWorldResult"])
    {
        if(!soapResults)
        {
            soapResults = [[NSMutableString alloc]init];
        }
        recordResults = TRUE;
    }
}

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    if(recordResults)
    {
        [soapResults appendString:string];
    }
}

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    if([elementName isEqualToString:@"HelloWorldResult"])
    {
        recordResults = FALSE;
        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"" message:soapResults delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alert show];
        soapResults = nil;
    }
}

对此的任何帮助表示赞赏。提前致谢。

4

2 回答 2

0

消息长度的标头是“Content-Length”而不是“Content-Type”,所以尝试:[theRequest addValue:msgLength forHTTPHeaderField:@"Content-Length"]; 而不是 [theRequest addValue:msgLength forHTTPHeaderField:@"Content-Type"]; 对于 REST Web 服务,应用程序服务器必须返回 XML 或 JSON 作为消息响应,请参阅我的“WebService”应用程序上的示例...

于 2012-04-25T09:43:49.520 回答
0

嗨,我创建了一个对我有用的工具,http://www.wsdl2code.com

SampleServiceProxy *proxy = [[SampleServiceProxy alloc]initWithUrl:@"YOUR
            URL" AndDelegate:self];

    [proxy GetDouble];
    [proxy GetEnum];
    [proxy getEnum:kTestEnumTestEnum2];
    [proxy GetInt16];
    [proxy GetInt32];
    [proxy GetInt64];
    [proxy GetString];
    [proxy getListStrings];
于 2013-01-28T06:46:04.747 回答