Как уже упоминалось в ReaddyEddy, вам нужно сохранить текущую строку, установив делегат parser foundCharacters. Так должно выглядеть примерно так:
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if (!currentStringValue) {
// currentStringValue is an NSMutableString instance variable
currentStringValue = [[NSMutableString alloc] initWithCapacity:50] ; // +1
}
NSString *tempString = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
if ([tempString length] > 0) {
[currentStringValue appendString:tempString] ;
}
}
тогда в вашем парсере didEndElement вам нужно проверить имя элемента, чтобы оно соответствовало вашему желаемому тегу. затем сохраните значение currentStringValue:
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if ( [elementName isEqualToString:@"id"]) {
self.id = currentStringValue ;
}
if ( [elementName isEqualToString:@"name"]) {
self.name = currentStringValue ;
}
}
что я обычно делаю, так это помещаю foundCharacters в класс baseModel.m. Тогда у меня все остальные модели унаследованы от него. И каждое наследование просто реализует свой синтаксический анализатор didEndElement. В вашем случае с животными и животными у меня также было бы две модели, одна с животными и одна с животными, а в Animals.m я бы искал тег Animal, а затем создал объект Animal (как то, что вы там делали), но тогда я просто установил бы делегат для вновь созданного объекта Animal и позволил модели Animal обрабатывать свой собственный анализ. Однако, если вы это сделаете, вам нужно проверить конечные теги для каждого и установить делегата обратно в родительский.