我正在使用 NSXMLParser 解析来自远程服务器的 XML 数据。我按照教程启动并运行,对于我正在创建的对象中的任何 (NSString *) 成员来说一切正常。我还需要从 XML 数据中设置整数,例如:
<root>
<child>
<name> Hello </name>
<number> 123 </number>
</child>
<child>
<name> World</name>
<number> 456 </number>
</child>
</root>
在这种情况下,我将创建两个“子”对象。我正在使用:
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
...
[aChild setValue:currentElementValue forKey:elementName];
...
}
委托设置值。这就是我遇到问题的地方。“NSString *name”成员每次都设置得很好,但是如果我使用 NSInteger,那么每当我尝试设置“number”时,我都会得到一个 EXC_BAD_ACCESS。所以我尝试使用“int”代替。但是现在我不能使用键值编程,需要手动查找节点:
if([elementName isEqualToString:@"number"]) {
aChild.number = [currentElementValue intValue]
}
没关系,我可以处理这个问题,因为我知道我将获得哪些节点,但情况会变得更糟。根据教程,当 currentElementValue 是“NSMutableString *”时,即使字符串正确,它也不会返回正确的整数。例如:
NSLog(@"NSMutableString Value: %@, and intValue %d\n", currentElementValue, [currentElementValue intValue]);
// Value will be 123 but intValue will be 0
因此,我将 currentElementValue 设为 NSString 而不是 NSMutableString,这样我就可以获得正确的 intValue。但我在网上读到它是 NSMutableString 的原因是:
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
用于设置值的委托可以多次出现,但通常不会出现。所以我的问题是有人知道我做错了什么吗?这对于 NSXMLParser 来说似乎是一个非常微不足道的案例,所以我确定这是我误解的事情。