скачать несколько странных файлов - NSURLConnection - PullRequest
0 голосов
/ 25 февраля 2010

Я столкнулся с проблемой, следуя вашему комментарию. Я хочу загрузить другой файл одновременно с другим делегатом:

.h:

NSMutableData *fileData;

.m:

NSString *imgfile = [NSString stringWithFormat:@"http://xxxx/01.jpg"];
NSURL *fileURL1 = [NSURL URLWithString:imgfile];

NSString *audiofile = [NSString stringWithFormat:@"http://xxxx/01.mp3"];
NSURL *fileURL2 = [NSURL URLWithString:audiofile];

NSURLRequest *request1 = [NSURLRequest requestWithURL:fileURL1 cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0 ];
NSURLRequest *request2 = [NSURLRequest requestWithURL:fileURL2 cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0 ];

NSArray *connections = [[NSArray alloc] initWithObjects:
[[NSURLConnection alloc] initWithRequest:request1 delegate:self ],
[[NSURLConnection alloc] initWithRequest:request2 delegate:self ],
nil];

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    fileData = [[NSMutableData alloc] init];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    [fileData appendData:data];        
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    NSLog(@"Unable to fetch data");
}

хорошо, процесс загрузки работает, но размер файла jpg и mp3 неверен, единственное правильное значение - это общий размер файла (jpg + mp3), пожалуйста, посмотрите код, чего не хватает ?

Другой вопрос: я поместил файл в NSMutableArray, у меня вопрос: как проверить, какой индекс массива имеет правильный тип файла (jpg и mp3)? потому что мне нужно сохранить их в папке устройства.

Ответы [ 2 ]

2 голосов
/ 25 февраля 2010

Похоже, что оба ваших подключения пишут в один и тот же объект fileData, и все ваши проблемы вытекают из этого.
Как работать с несколькими соединениями, вы можете увидеть соответствующий вопрос , заданный здесь на SO, также есть хороший пост в блоге , содержащий NSURLConnection подкласс, который решает эту проблему.

0 голосов
/ 17 марта 2010

Вот что я делаю, я установил счетчик для определения типа файла для сохранения:

  - (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    NSMutableData *dataForConnection = [self dataForConnection:(CustomURLConnection*)connection];
    [connection release];

   // Do something with the dataForConnection.

   downloadCount ++;

//  Copy Image Data to ur location using FileManager
//UIImage *img = [UIImage imageWithData:fileData];
NSString *saveDir;
if (downloadCount ==1)
    saveDir = [NSString stringWithFormat:@"001.jpg"];
if (downloadCount == 2)
    saveDir = [NSString stringWithFormat:@"001.mp3"];

//NSLog(@"saveDir=%@",saveDir);
NSArray  * sysPaths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES );
NSString * filePath = [[NSString alloc] initWithFormat: @"%@/%@", [sysPaths objectAtIndex: 0], saveDir];
NSLog(@"filePath=%@",filePath);

if([dataForConnection writeToFile:filePath atomically:YES])
    NSLog(@"DONE COPYING");
else
    NSLog(@"Write to device error");
//[fileData setLength:0];

if (downloadCount == 2)
{
    downloadCount = 0;
    play the MP3 and display the image file;
}

}

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

...