2013-04-01 68 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> 

我使用RaptureXML解析XML文件和解析可以如下完成。

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"];