所以我正在构建一个请求xml文件并解析它的应用程序。以下代码将名称放在标签中,其余数据放入文本视图中。现在,我在if语句中包含了一个条件,该条件计算该循环运行的次数,仅返回前两个元素。或者至少那是我应该做的。
repCount最初设为0。
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURIqualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { WeatherItem *weatherItem = [[WeatherItem alloc] init];
//Is a Location node
if ([elementName isEqualToString:@"Location"])
{
weatherItem.name = [attributeDict objectForKey:@"name"];
locationLabel.text = [NSString stringWithFormat:@"%@", weatherItem.name];
NSLog(@"weatherName---> %@", weatherItem.name);
}
//Is a Rep node
if ([elementName isEqualToString:@"Rep"] && repCount <= 1)
{
weatherItem.winddir = [attributeDict objectForKey:@"D"];
weatherItem.visibility = [attributeDict objectForKey:@"V"];
weatherItem.windspeed = [attributeDict objectForKey:@"S"];
weatherItem.temperature = [attributeDict objectForKey:@"T"];
weatherItem.precipprob = [attributeDict objectForKey:@"Pp"];
weatherItem.weather = [attributeDict objectForKey:@"W"];
NSLog(@"weatherItem---> %@", weatherItem.precipprob); //easiest value to keep track of
resultsTextView.text = [NSString stringWithFormat:
@"Wind Dir:%@\nVisibility:%@\nWind Speed:%@mph\nTemperature:%@C\nPrecip Prob.:%@%%\nWeather:%@\n",
weatherItem.winddir, weatherItem.visibility, weatherItem.windspeed,
weatherItem.temperature, weatherItem.precipprob, weatherItem.weather];
repCount ++;
}
repCount = 0;}
问题是它只返回XML文件中的非常LAST元素而不是前两个元素。我会假设它遍历循环一次(repCount为0)然后将其触发到resultsTextView。再次运行它(repCount现在为1)然后将其添加到对resultsTextView触发的内容。然后停止,因为它将通过检查repCount&lt; = 1。
我错过了什么?
提前致谢。
答案 0 :(得分:0)
我认为原因是你有一项任务可以在方法结束时清除repCount
:
repCount = 0;
将repCount
设置为零需要在方法外部完成 - 无论是在初始化时还是在起始文档事件处理程序中。目前,由于repCount
在每个元素之后被重置,因此对于您处理的每个元素,条件的&& repCount <= 1
部分仍然是正确的,因此最后一个元素的数据会覆盖已经存在的元素那之前。
将repCount = 0
分配移到NSXMLParserDelegate的parserDidStartDocument:
方法中可以解决问题。