Вот как это работает:
Там есть класс называется NSXMLParser. Он используется для анализа XML-файлов. Однако NSXMLParser глуп. Все, что он знает, как это сделать, - это проанализировать XML, но он не знает, что он должен делать с информацией, которую он находит.
Введите делегата. Делегат - как няня. Поскольку XMLParser не имеет понятия, что делать с информацией, которую он находит, он идет и просит своего делегата обо всех: «Эй, я начал разбирать документ! Я должен что-нибудь сделать?» «Эй, я нашел какой-то CDATA! Что я должен делать с этим!» «Эй, я нашел еще один тег!» «Эй, я нашел закрывающий тег!» И так далее. Все эти «Эй!» операторы - это методы делегата, или, другими словами, они являются необязательными методами, которые объект-делегат может реализовать. Обычно (но не всегда) объект, создающий NSXMLParser, также является делегатом, но это не обязательно.
Таким образом, вы могли бы иметь что-то вроде этого:
NSXMLParser * parser = [[NSXMLParser alloc] initWithContentsOfURL:someURLToAnXMLFile];
[parser setDelegate:self];
[parser parse];
[parser release];
Затем в том же объекте (само), вы можете иметь некоторые из этих методов:
- (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, что означает, что это парсер, управляемый событиями. Он находит материал, и он рассказывает вам об этом.
Что не имеет смысла в онлайн-документации? – hhafez
Я не просто уверен, что я должен переопределить, чтобы заставить его работать. – PF1
Нечего переоценивать. Вы делаете отдельный объект и назначаете его делегатом парсера. В этом объекте вы отвечаете на определенные сообщения (некоторые требуются, некоторые необязательные), которые сообщают вам, что нашел парсер. –