2012-12-07 20 views
6

Obecnie tworzę aplikację na iOS 6 na iPady, która korzysta z asynchronicznych plików do pobrania. Aby otrzymać informacje o postępie, skorzystałem z delegata NSURLConnectionDownloadDelegate. Pobieranie i postępy otrzymane przezNSURLConnectionDownloadDelegate destinationURL

– connection:didWriteData:totalBytesWritten:expectedTotalBytes: 

działa dobrze.

Jednak po zakończeniu pobierania, nie wiem jak wydobyć dane z NSURLdestinationURL dostarczonych przez delegatemethod

– connectionDidFinishDownloading:destinationURL: 

destinationUrl otrzymanych String wygląda „/private/var/mobile/Applications/7CB3B194-9E79-4F0B-ACFD-7B87AA8C7BAF/tmp/filename.mp4

Następnie próbuję wyodrębnić dane z podanego NSURL:

NSData *data = [[NSData alloc] initWithContentsOfURL:destinationURL]; 

Dane jednak jest pusty ...

NSLog(@"data Size: %@", data.length);  //prints out 0 

Ma ktoś ten sam problem przy użyciu NSURLConnectionDownloadDelegate? Wszelkie pomysły, jak rozwiązać?


Edit: Próbowałem skopiować plik, a potem użyć [NSData initWithContentsOFFile] jak sugerowano, ale rozmiar danych jest nadal 0.

- (void) connectionDidFinishDownloading:(NSURLConnection *)connection destinationURL:(NSURL *)destinationURL 
{ 

[[NSFileManager defaultManager] copyItemAtPath:destinationURL.path toPath:DEST_PATH error:nil]; 

NSData *data = [[NSData alloc] initWithContentsOfFile:DEST_PATH]; 

NSLog(@"data Size: %i", data.length); //still returns 0.. 
} 

Edit2: mogę wyodrębnić NSData przy użyciu metody sendAsynchronousRequest z NSURLConnection. Jednak jak to, nie jestem w stanie określić postęp pobierania ...

[NSURLConnection sendAsynchronousRequest:theRequest queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){ 
if (data){ 
NSLog(@"Size of the data: %i Bytes(s)", data.length); //works fine 
[data writeToFile:DEST_PATH atomically:YES]; 
//From this point i can use the file at DEST_PATH 

NSLog(@"Succeeded!"); 
} 
else if (error) 
NSLog(@"%@",error); 
}]; 
+0

co jeśli skopiować plik do ścieżki zawartości i spróbuj go otworzyć tam? – jimpic

+0

Wypróbuj tę odpowiedź: http://stackoverflow.com/questions/12582849/nsurlconnectiondownloaddelegate-expectedtotalbytes-zero-in-ios-6 – emrys57

+0

Czy spojrzałeś na odpowiedź z poprzedniego komentarza? – emrys57

Odpowiedz

0

Sprawdź, czy plik istnieje. Mam ten sam problem i muszę użyć NSURLConnectionDataDelegate i zapisać dane ręcznie i dlatego: Wystąpił błąd związany z NSURLConnectionDownloadDelegate związany z niektórymi rozszerzeniami plików.

Również można zobaczyć odpowiedź na to samo pytanie tutaj: NSURLConnectionDownloadDelegate file issue

+1

Tak, prawdopodobnie wystąpił problem z NSURLConnectionDownloadDelegate.Zastąpiłem delegata NSConnectionDataDelegate, teraz mogę pobrać plik asynchronizujący i nadal wyświetlać postęp pobierania. – andre

0

/private/var/mobile/Applications/7CB3B194-9E79-4F0B-ACFD-7B87AA8C7BAF/tmp/filename. mp4

to ścieżka, a nie adres URL. Spróbuj initWithContentsOfFile: zamiast tego.