Iphone XML解析后的数组计数为1

Iphone XML解析后的数组计数为1,iphone,objective-c,xml,xcode,Iphone,Objective C,Xml,Xcode,我正在iPhone应用程序中解析航班时间 下面是XML中的一个片段 <?xml version="1.0" encoding="iso-8859-1"?> <airport xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <flights lastUpdate="2011-11-07T10:49:43"> <flight uniqueID="2131560"> <airline

我正在iPhone应用程序中解析航班时间

下面是XML中的一个片段

<?xml version="1.0" encoding="iso-8859-1"?>
<airport xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<flights lastUpdate="2011-11-07T10:49:43">
<flight uniqueID="2131560">
  <airline>DY</airline>
  <flight_id>DY1052</flight_id>
  <dom_int>S</dom_int>
  <schedule_time>2011-11-04T06:00:00</schedule_time>
  <arr_dep>D</arr_dep>
  <airport>SVG</airport>
  <via_airport>CPH</via_airport>
  <check_in>C</check_in>
</flight>
<flight uniqueID="2136807">
  <airline>SK</airline>
  <flight_id>SK308</flight_id>
  <dom_int>D</dom_int>
  <schedule_time>2011-11-07T07:15:00</schedule_time>
  <arr_dep>D</arr_dep>
  <airport>SVG</airport>
  <via_airport>SVG</via_airport>
  <check_in>EF</check_in>
</flight>
...
我使用NSXMLParser来解析XML

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

if ([elementName isEqualToString:@"airport"]) {
    allFlights = [[NSMutableArray alloc]init];
}
else if([elementName isEqualToString:@"flight"]){
    flight = [[Flights alloc]init];

    flight.flightUniqueID = [[attributeDict objectForKey:@"uniqueID"]integerValue];

}

}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { 
  if(!currentElementValue) 
    currentElementValue = [[NSMutableString alloc] initWithString:string];
else
    [currentElementValue appendString:string];


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

if ([elementName isEqualToString:@"flights"]) {
    return;
}
if ([elementName isEqualToString:@"flight"]) {
    NSLog(@"Adding object: %@" , flight);
    [allFlights addObject:flight];

    [flight release];
    flight = nil;
}else
    [flight setValue:currentElementValue forKey:elementName];

   [currentElementValue release];
currentElementValue = nil;
}
当我记录“飞行”时,我得到以下输出:

Adding object: <Flights: 0xsomenumber>
...
Adding object: <Flights: 0x7064360>
添加对象:
...
添加对象:
不管xml中有多少航班,它都会继续

但是,我将每个对象添加到的数组仅存储最后一个flight对象。如果在解析完成后尝试对数组进行NSLog,它将打印出最后一个对象,而不会打印其他对象

显然,我需要将所有航班存储在数组中,以便在解析完成后在tableview中显示所有航班

我怎样才能做到这一点?我错过什么了吗


我试图在不释放flight对象的情况下解析XML,但也没有成功。

您在airport元素上将allFlights设置为空数组。我猜您希望在启动时对其进行一次初始化


但是,每个航班元素中都有嵌套的airport元素,因此只能以最后一个航班结束。尝试在其他地方初始化所有航班。

解析操作完成后,请重试

NSLog(@"the number of objects are -> %d", [Your Array object count]);
看看它显示了什么

如果显示的对象数正确,则表示添加了所有对象。 您可以使用循环打印它们,如

for (Flight *objFlight in arrFlights)
{
    NSLog (@"Flight Name -> %@",objFlight.strFlihtName);
}

快乐编码…

我用loadView方法初始化了它,现在工作起来很有魅力。真不敢相信我在发帖之前没有试过。无论如何,谢谢你,伙计!
for (Flight *objFlight in arrFlights)
{
    NSLog (@"Flight Name -> %@",objFlight.strFlihtName);
}