Я использую 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, то всякий раз, когда я пытаюсь установить "число", я получаю 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, поэтому я уверен, что это то, что я неправильно понимаю.