2013-04-01 7 views
0

이 질문은 중복 된 질문 일 수 있습니다. 하지만 내 문제에 대한 적절한 대답을 찾을 수 없었습니다.iOS - 구문 분석 후 xml 데이터 저장

다음 xml 파일을 서버에서 다운로드하고 있습니다.

<INCIDENTTYPES> 
    <INCIDENT FORMNAME="first" TEXT="First incident"> 
     <TYPE>Type1</TYPE> 
     <TYPE>Type2</TYPE> 
     <TYPE>Type3 Tag</TYPE> 
     <TYPE>Type4 Tag</TYPE> 
     <LOCATION>Council</LOCATION> 
     <LOCATION>Domestic</LOCATION> 
     <LOCATION>Commercial</LOCATION> 
    </INCIDENT> 
    <INCIDENT FORMNAME="second" TEXT="Second incident"> 
     <TYPE>Second type</TYPE> 
     <TYPE>Second/first type</TYPE> 
     <TYPE>Second3</TYPE> 
     <LOCATION>Council</LOCATION> 
     <LOCATION>Domestic</LOCATION> 
     <LOCATION>Commercial</LOCATION> 
    </INCIDENT> 
</INCIDENTTYPES> 

저는 XML 파일을 구문 분석하는 데 RaptureXML을 사용하고 있으며 다음과 같이 구문 분석을 수행 할 수 있습니다.

RXMLElement *rootXML = [RXMLElement elementFromXMLData:self.connectionData];    
    [rootXML iterate:@"INCIDENT" usingBlock: ^(RXMLElement *incidents) { 

     if([[incidents attribute:@"FORMNAME"] isEqualToString:@"first"]){ 
      NSArray *listArray = [NSArray array]; 
      listArray = [incidents children:@"TYPE"]; 

      IncidentData *iData = [[IncidentData alloc] init]; 
      [iData.type setValue:listArray forKey:@"type"]; 

      NSData *data = [NSKeyedArchiver archivedDataWithRootObject:iData]; 
      [self.userDefault setObject:data forKey:@"firstObject"]; 
     } 
    } 

IncidentData 클래스는 다음과 같습니다.

#import "IncidentData.h" 

    @implementation IncidentData 

    - (id)initWithCoder:(NSCoder *)aDecoder{ 
     if (self = [super init]) { 
//self.type is an array 
      self.type = [aDecoder decodeObjectForKey:@"type"]; 

     } 
     return self; 
    } 

    - (void)encodeWithCoder:(NSCoder *)aCoder{ 
     [aCoder encodeObject:self.type forKey:@"type"]; 
    } 

    @end 

다음과 같이 데이터를로드하려고합니다.

NSData *dd = [self.userDefault objectForKey:@"firstObject"]; 

IncidentData *items = (IncidentData *)[NSKeyedUnarchiver unarchiveObjectWithData:dd]; 
NSArray *typeArray = [items.type objectAtIndex:0]; 
NSLog(@"Incident type : %@", typeArray); 

그러나 typeArray는 null입니다.

요약 : 원격 xml 파일을 구문 분석하고 값을 디스크에 저장하고 해당 응용 프로그램의 후기 단계를 사용하려고합니다.

도와 주시겠습니까?

답변

1

RaptureXML, RXMLElement는 NSCoding을 지원하지 않을 수 있습니다.
시도의 대입 :
listArray = [incidents children:@"TYPE"];
과 :
listArray = [[incidents children:@"TYPE"] valueForKeyPath:@"text"];