スタック オーバーフローは初めてです。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:@"<"];
query = [query stringByReplacingOccurrencesOfString:@">" withString:@">"];
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;
}
}
これに関するヘルプは大歓迎です。前もって感謝します。