Я создаю приложение, которое должно обрабатывать несколько разных типов XML-файлов. Поскольку я хочу максимально стандартизировать процедуру, я создал одноэлементный класс, который обрабатывает анализ любых данных XML. Классу передаются две опции: уникальный идентификатор, сообщающий ему, какие данные XML он будет анализировать, и сами данные. Внутри класса есть следующая функция, которая выполняет разбор и возвращает объект NSMutableArray, содержащий результаты:
- (NSMutableArray*) initAPIDataParse:(NSData *)data APIRequestType:(int)requestType {
// Init parser
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
// Set delegate for parser
if (requestType == kXMLParserTypeOne) {
[parser setDelegate:[[[XMLParserOne alloc] init] autorelease]];
} else if (requestType == kXMLParserTypeTwo) {
[parser setDelegate:[[[XMLParserTwo alloc] init] autorelease]];
} // etc.
// let's parse the XML
[parser parse];
[parser release];
return lastParsedDict; //lastParsedDict is the NSMutableArray object returned from the Parser delegate
}
Вышеприведенный код работает как чудо, за исключением того, что если вы анализируете один и тот же тип XML несколько раз, эта строка пропускает (что имеет смысл):
[parser setDelegate:[[[XMLParserOne alloc] init] autorelease]];
Я пытался решить эту проблему несколькими способами, например, создать переменную экземпляра с экземпляром делегата и выпускать ее всякий раз, когда снова запрашивался парсер XML того же типа, но он не работал.
Я рад за любую помощь, большое спасибо!