-1

XML応答を消費して解析しています..しかし、オブジェクトをNSMutableDictionaryに追加してからnSMutableArrayに追加すると、応答はnullになります.どこが間違っているのか理解できませんでした? 私のXmlresponseは次のようなものです:

<List>
<Address>
   <City>Michigan</City>
   <Line1>17</Line1>
   <line2>12</Line2>
 </Address>
<Employee>
    <EmployeeName>Williams</EmployeeName>
 </Employee>
 <Address>
   <City>NewYork</City>
   <Line1>27</Line1>
   <line2>52</Line2>
</Address>
<Employee>
    <EmployeeName>Mandarin</EmployeeName>
</Employee>

私の応答は次のようになります。

Michigan 
17
12
Williams

NewYork
27
52
Mandarin

そして、私の解析コードは次のようになります:

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI: (NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {

element = elementName;
if([elementName isEqualToString:@"Address"])
    {
        arr=[[NSMutableArray alloc] init];
        drr=[[NSMutableDictionary alloc] init];


    }

}

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


- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString   *)namespaceURI qualifiedName:(NSString *)qName {

if([elementName isEqualToString:@"City"])
{
    [drr setObject:srr forKey:@"City"];
    [srr release],srr=nil;
    return;
}  

if([elementName isEqualToString:@"Line1"])
{

     [drr setObject:srr forKey:@"Line1"];
     [srr release],srr=nil;
     return;    
}
if([elementName isEqualToString:@"Line2"])
   {

       [drr setObject:srr forKey:@"Line2"];
       [srr release],srr=nil;
       return;      
   }

if([elementName isEqualToString:@"Address"])
{
    [arr addObject:drr];
    [drr release],drr=nil;


}
[srr release],srr=nil;
}
NsLog(@"%@",arr);

しかし、'arr' で応答を確認すると、NULL が返されますか?そうですか?どこが間違っているのでしょうか?

4

1 に答える 1

0

viewDidLoad で iVar を初期化してください

arr=[[NSMutableArray alloc] init];
        drr=[[NSMutableDictionary alloc] init];

なぜなら

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI: (NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {

各要素が解析されるときに呼び出されるため、何度も再割り当てされます

于 2012-09-28T10:40:01.163 に答える