Ответ 1
Вот как это работает:
Есть класс под названием NSXMLParser. Он используется для анализа XML файлов. Однако NSXMLParser глуп. Все, что он знает, как это сделать, - это проанализировать XML, но он не знает, что он должен делать с информацией, которую он находит.
Введите делегат. Делегат - как няня. Поскольку XMLParser не имеет понятия, что делать с информацией, которую он находит, он идет и просит своего делегата обо всех: "Эй, я начал разбирать документ! Я должен что-нибудь сделать?" "Эй, я нашел какой-то CDATA! Что я должен делать с этим!" "Эй, я нашел еще один тег!" "Эй, я нашел закрывающий тег!" И так далее. Все эти "Эй!" операторы - это методы делегата, или, другими словами, они являются необязательными методами, которые объект-делегат может реализовать. Обычно (но не всегда) объект, создающий NSXMLParser, также является делегатом, но это не обязательно.
Итак, у вас может быть что-то вроде этого:
NSXMLParser * parser = [[NSXMLParser alloc] initWithContentsOfURL:someURLToAnXMLFile];
[parser setDelegate:self];
[parser parse];
[parser release];
Тогда в том же самом объекте (self) у вас могут быть некоторые из этих методов:
- (void)parserDidStartDocument:(NSXMLParser *)parser {
//the parser started this document. what are you going to do?
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict {
//the parser found an XML tag and is giving you some information about it
//what are you going to do?
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
//the parser found some characters inbetween an opening and closing tag
//what are you going to do?
}
- (void)parserDidEndDocument:(NSXMLParser *)parser {
//the parser finished. what are you going to do?
}
В документации есть целая куча этих методов. Просто перейдите к ссылке на NSXMLParser, и все они перечислены в разделе "Методы делегатов". После того, как вы получите его, NSXMLParser довольно прост в использовании. Это SAX Parser, что означает его парсер, управляемый событиями. Он находит материал, и он рассказывает вам об этом.