У меня есть приложение, которое просматривает массив URL-адресов и загружает все файлы в этом массиве (10 небольших файлов txt и 1 файл большого изображения). Раньше у меня было приложение, загружающее файлы нормально, но из-за проблемы с большим изображением мне пришлось подклассифицировать NSURLConnection, и я думаю, что я не совсем понял, что файлы не загружаются.Приложение, не загружающее файлы с помощью NSURLConnection
Для каждого элемента из GetFiles массива передается URL и запуск:
-(void)getFile:(NSString*)url tag:(NSString*)tag {
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
FileURLConnection *connection = [[FileURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES tag:tag];
if (connection) {
[receivedData setObject:[NSMutableData data] forKey:connection.tag];
}
}
Вот делегаты NSURLConnection:
-(NSMutableData*)dataForConnection:(FileURLConnection*)connection {
NSMutableData *data = [receivedData objectForKey:connection.tag];
return data;
}
- (void)connection:(FileURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
NSUserDomainMask, YES) objectAtIndex:0]stringByAppendingPathComponent:fileName];
NSMutableData *dataForConnection = [self dataForConnection:(FileURLConnection*)connection];
[dataForConnection setLength:0];
}
- (void)connection:(FileURLConnection *)connection didReceiveData:(NSData *)data {
NSMutableData *dataForConnection = [self dataForConnection:(FileURLConnection*)connection];
[dataForConnection appendData:data];
}
- (NSCachedURLResponse *)connection:(FileURLConnection *)connection
willCacheResponse:(NSCachedURLResponse*)cachedResponse {
return nil;
}
- (void)connectionDidFinishLoading:(FileURLConnection *)connection {
NSLog(@"connectionDidFinishLoading run");
NSMutableData *dataForConnection = [self dataForConnection:(FileURLConnection *)connection];
NSString *fileName = connection.tag;
NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]stringByAppendingPathComponent:fileName];
[[NSFileManager defaultManager] createFileAtPath:filePath contents:nil attributes:nil];
file = [NSFileHandle fileHandleForUpdatingAtPath:filePath];
[file seekToEndOfFile];
[file writeData:dataForConnection];
[file closeFile];
}
EDIT: Если я NSLog в receivedData (NSDictionary) в getFile он обновляет объект «тег», но не имеет данных для его работы:
"accomodation.txt" = <>;
"future-congress-dates.txt" = <>;
"general-file.txt" = <>;
...
Я также попытался NSLog в dataForConnection (NSMutableData) для каждого делегата, но ничего не печатается:
NSLog(@"dataForConnection %@", dataForConnection);
Ваше соединение начинается сразу же, и в этот момент у вас нету установить пустой изменяемые данные в вашем объекте receivedData. Вы пытались запустить его после того, как вы установили пустые данные? Кроме того, было бы проще просто использовать - (BOOL) writeToFile: (NSString *) path atomically: (BOOL) флаг метод NSData для записи данных в файл. – Andrei
Хорошо, что мне нужно переместить где? Кроме того, теперь я просматриваю writeToFile, чтобы узнать, могу ли я заставить его работать в моем примере. – Ryan
Попробуйте следующее: FileURLConnection * connection = [[FileURLConnection alloc] initWithRequest: request delegate: self startImmediately: NO tag: tag]; если (подключение) { [полученData комплектObject: [NSMutableData данные] дляKey: connection.tag]; [соединение старт]; } – Andrei