Iphone XML解析后的数组计数为1
我正在iPhone应用程序中解析航班时间 下面是XML中的一个片段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
<?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);
}