Похоже, что вы запускаете загрузки по одному, но они не заканчиваются в одном и том же порядке - поэтому вы создаете каждый объект, сообщая ему, что он загружает элемент X из Y, но если объект 6, загружающий объект, завершаетдо того, как объект загрузит элемент 4, ваш X будет, как вы говорите, повсюду.
Каждый загрузчик обоев должен просто сообщить appController, что он завершен, и позволить appController содержать количество загруженных на данный момент элементов и общее количество.
На самом деле, загрузчикам обоев на самом деле не нужно знать, сколько загрузок происходит, или какой именно они номер.Ваш источник данных XML должен сообщать вашему «контроллеру приложения» об общем количестве загрузок, а затем каждый загрузчик, когда он завершает, должен сообщать контроллеру, что это сделано.
Итак, ваш текущий метод инициализации будет просто:
- (id)initWithWallpaperURL:(NSURL *)imageUrl andFileOutput:(NSString*)fileOutput
Я не уверен, что вам следует каждый раз в этом методе выделять новый экземпляр appController - остальной кодПохоже, должен быть один из них, который отображает одну метку, фактически делегат для загрузчика?Возможно, это должно быть назначено источником данных XML при создании каждого объекта?
После завершения загрузки ваш метод connectionDidFinishLoading будет выглядеть примерно так:
[appController downloaderDidFinishDownloading:self];
Что вызоветметод в вашем appController, который выглядит примерно так:
-(void)downloaderDidFinishDownloading:(WCSWallpaperDownloader*)downloader
{
completedDownloads++;
[txtStatus setStringValue:[NSString stringWithFormat:@"Downloaded %i of %i",completedDownloads,totalDownloads]];
}
Где completedDownloads
и totalDownloads
- это ивары в вашем классе контроллера приложения.