-1

Web サービスを使用しようとしていますが、要素名が変更されると、他のすべてが変更されます...

-(void)callWebService {
    _estacionamentoAdd = [[Estacionamento alloc]init];
    NSString *url = @"http://urlfromws";
    NSMutableURLRequest *request =[[[NSMutableURLRequest alloc] init] autorelease];
    [request setURL:[NSURL URLWithString:url]];
    [request setHTTPMethod:@"GET"];

    NSURLConnection *conn=[[NSURLConnection alloc] initWithRequest:request delegate:self];
    if (conn) {
        webData = [[NSMutableData data] retain];
    }
    else
    {

    }
}

//レスポンスの値を取得するとき

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
    if(!soapResults)
    {
        soapResults = [[NSMutableString alloc] init];
    }
    NSLog(@"stringFound:%@", string);
    [soapResults setString:string];
}

//レスポンス受信時

   - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName        namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
 {
     if(!soapResults)
    {
        soapResults = [[NSMutableString alloc] init];
  }


if( [elementName isEqualToString:@"id"])
{
 id = [soapResults intValue];
}
else if( [elementName isEqualToString:@"name"])
{
    name = soapResults;
}
else if( [elementName isEqualToString:@"adress"])
{
    adress = soapResults;

 }
[soapResults setString:@""];

    }

要素名が「name or address」の場合、id と name は address と同じです

elementName が id の場合、id = soapResults. わかりましたが、elementName が Address の場合、address= soapResults と id も変更されます。なんで?

4

2 に答える 2

2

名前とアドレスが常に @"" かつ同一であることがわかります。

例えば

...
name = soapResults; //NOT copied.. name and soapResults are the same object
... 
[soapResults setString:@""]; //affects name too, as they are the same 

アドレスは同じですが、id は異なります。これは、オブジェクトではなく整数であるためです。

  • 名前 = アドレス = soapResults...

値をコピーすることもできます

name = [soapResults description];
...
address = [soapResults description];

その他の問題:
[soapResults setString:newString] を foundCharacters で使用しないでください。appendString を使用してください (foundCharacters は n 回呼び出されます)。

于 2012-12-01T20:34:09.563 に答える
0

私は私の問題を解決しました:

//常に NSMutableString を解放する

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if(soapResults) {
    [soapResults release];
    soapResults = nil;
}

    soapResults = [[NSMutableString alloc] init];

NSLog(@"stringFound:%@", string);
[soapResults appendString:string];

}

于 2012-12-03T11:18:18.670 に答える