iphone скачать несколько файлов - PullRequest
0 голосов
/ 17 мая 2010

В моем приложении мне нужно скачать несколько plist.

чтобы скачать список, я использую NSURLconnection

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

Чтобы загрузить plist, я использую где-то в моем коде NSURL, установленный на адрес, где находится plist, затем я устанавливаю NSURLRequest с политикой кэширования URL и интервалом ожидания. Затем я установил NSMutableData на соединение NSURL с NSURLRequest. В делегате didReceiveData: я добавляю данные в мой изменяемый объект данных, в didFailWithError: я обрабатываю ошибку. И, наконец, в connectionDidFinishLoading я сериализирую свои данные в список, чтобы я мог написать, подать свой список и выпустить свое предупреждение.

Моя проблема: как я могу это сделать, если у меня есть несколько файлов для загрузки, потому что connectionDidFinishLoading вызывается каждый раз, когда мой NSURLConnection завершается, но я хочу освободить свой UiAlert, когда все закончится. Но при загрузке первого plist мой код в connectionDidFinishLoading сработает.

вот мой код:

в представлении загрузил:

// set the UiAlert in the view did load 
NSURL *theUrl = [NSURL URLWithString:@"http://adress.com/plist/myPlist.plist"];
NSURLRequest *theRequest = [NSURLRequest requestWithURL:theUrl cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
self.plistConnection = [[ NSURLConnection alloc] initwithRequest:theRequest delegate:self startImmediatly:YES];
//plistConnection is a NSURLConnection
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
[incomingPListData appendData:data];
}

-(void)connection:(NSURLConnection *)connectionDidFailWithError:(NSError *)error {

// handle error here 
}

-(void)connectionDidFinisloading:(NSURLConnection *) connection { 
NSPropertyListFormat format;
NSString *serialErrorString; 

NSData *plist = [NSPropertyListSerialisation propertyListFromData:incomingPlistData mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&serialErrorString];

if (serialErrorString) {//error}
else { // create path and write plist to path}
// change message and title of the alert

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

спасибо всем

Ответы [ 2 ]

0 голосов
/ 17 мая 2010

Я думаю, что unset дал хороший ответ.Я понимаю, что вы этого не получите (вы когда-нибудь), так как я помню, что я новичок в программировании и тому подобное.

Поэтому я предоставляю другой, гораздо более простой вариант оценки, если все загрузки закончились.

вы просто используете счетчик, который вы определили в своем файле .h,

int activeDownloads;

в файле реализации (.m), где бы вы ни начинали все свои загрузки, установите activeDownloads на ноль доЛюбая из ваших загрузок начинается

 activeDownloads = 0;

, прежде чем начать загрузку, вы увеличиваете число активных загрузок

++activeDownloads;

, если загрузка завершается или не удается, вы уменьшаете ту же контрразрядную

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { --activeDownloads;}

(я не записывал метод, который вызывается в случае сбоя загрузки ...

также каждый раз, когда соединение завершается или не удается, вы должны проверить, было ли последнее, завершившее или обработавшее соединение, последним1. Вы делаете это, просто проверяя, равен ли activeDownloads нулю. Если это так, вы можете добавить кнопку «Закрыть» в AlertView.

Недостаток этого решенияявляется то, что вы не можете отслеживать, какое соединение успешно, а какое не удалось.(ну, да, но activeDownloads не поможет вам в этом)

надеюсь, что смогу помочь

ура

0 голосов
/ 17 мая 2010

Вы можете перебирать массив ресурсов, которые хотите загрузить, и распределять запрос для каждого из них. Можно установить тег для соединения (например, индекс URL в массиве), который можно оценить в connectionDidFinishLoading. Если вы храните информацию о том, какие запросы отправлены, а какие выполнены, вы можете легко увидеть, загружены ли все файлы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...