Путаница с делегатами. Как узнать, когда несколько делегатов выполнили свою задачу? - PullRequest
3 голосов
/ 14 октября 2010

Я создал базовую систему синтаксического анализа Web XML для базовых данных, но я не уверен, как настроить несколько анализаторов одновременно и знаю, когда все они будут выполнены.

Это мои текущие настройки, который получает только один проанализированный XML-файл («новости»).Но у меня есть несколько XML-файлов, которые мне нужно проанализировать ("спорт", "магазин" и т. Д.).Как бы отключить все это и узнать, когда они все будут выполнены?

// ViewController.m

DataGrabber *dataGrabber = [[DataGrabber alloc] init];
dataGrabber.delegate = self;
[dataGrabber getData:@"news"];


// DataGrabber delegate method (within ViewController) which gets called when dataGrabber has got all of the XML file
- (void) dataGrabberFinished:(DataGrabber *)dataGrabber
{
   NSManagedObjectContext *context = [self managedObjectContext];
   NSError *parseError = nil;
   // Parser puts the xml into core data. Do I need delegate on this too?
   Parser *xmlParse = [[Parser alloc] initWithContext:context];
   [xmlParse parseXMLFileWithData:dataGrabber.payload parseError:&parseError];
   [xmlParse release];
}

(это продолжение этого вопроса - Возвращение данных из класса захвата данных из Интернета? )

1 Ответ

3 голосов
/ 14 октября 2010

Один из вариантов - подсчитать, сколько вы создаете, а затем сделать каждый обратный вызов метода, который отсчитывает от этого общего количества. Когда все возвращается к нулю, они все сделаны.

Вам нужно будет настроить делегата для парсера, как вы это сделали для загрузчика.

...