Mam folder na moim serwerze zdalnym, na którym znajduje się kilka plików .png. Chcę je pobrać z mojej aplikacji i zapisać w folderze "Dokumenty" aplikacji. Jak mogę to zrobić?Jak pobierać pliki z Internetu i zapisywać w "Dokumentach" na telefonie iPhone?
Odpowiedz
Łatwym sposobem jest skorzystanie z wygodnych metod NSData: initWithContentOfURL:
i writeToFile:atomically:
, aby uzyskać odpowiednio dane i odpowiednio je zapisać. Pamiętaj, że jest to synchroniczne i blokuje każdy wątek, który wykonasz, aż do zakończenia pobierania i zapisu.
Na przykład:
// Create and escape the URL for the fetch
NSString *URLString = @"http://example.com/example.png";
NSURL *URL = [NSURL URLWithString:
[URLString stringByAddingPercentEscapesUsingEncoding:
NSASCIIStringEncoding]];
// Do the fetch - blocks!
NSData *imageData = [NSData dataWithContentsOfURL:URL];
if(imageData == nil) {
// Error - handle appropriately
}
// Do the write
NSString *filePath = [[self documentsDirectory]
stringByAppendingPathComponent:@"image.png"];
[imageData writeToFile:filePath atomically:YES];
Jeżeli metoda documentsDirectory
kradzieży bezwstydnie z this question:
- (NSString *)documentsDirectory {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
return [paths objectAtIndex:0];
}
Jednakże, chyba że masz zamiar wkręcić ją sobie ten przestanie aktywność UI natomiast pobierania plików. Możesz zamiast tego chcieć zajrzeć do NSURLConnection i jego delegata - to pobiera w tle i powiadamia delegata o danych pobranych asynchronicznie, abyś mógł zbudować instancję NSMutableData, a następnie wypisać ją po zakończeniu połączenia. Twój delegat może zawierać metod takich jak:
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
// Append the data to some preexisting @property NSMutableData *dataAccumulator;
[self.dataAccumulator appendData:data];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
// Do the write
NSString *filePath = [[self documentsDirectory]
stringByAppendingPathComponent:@"image.png"];
[imageData writeToFile:filePath atomically:YES];
}
małe szczegóły, takie jak deklarowania dataAccumulator
i obsługi błędów, pozostawia czytelnikowi :)
ważne dokumenty:
- 1. Jak pobierać pliki i zapisywać na lokalnym komputerze za pomocą AFNetworking 3.0?
- 2. Jak programowo odtwarzać pliki MP3 na telefonie iPhone?
- 3. Jak pobierać pliki Magento
- 4. Rozpoznawanie mowy na telefonie iPhone
- 5. Java IDE * na * telefonie iPhone?
- 6. Jak uzyskać kod MCC i MNC na telefonie iPhone?
- 7. jak pobierać pliki zewnętrzne w gradle?
- 8. Jak zapisywać obrazy i nagrane pliki w katalogu tymczasowym?
- 9. Jak zapisywać i ładować linie rysunkowe iphone SDK
- 10. Jak zaimplementować wykres słupkowy w telefonie iPhone?
- 11. Jak wykonać wbudowany montaż w telefonie iPhone?
- 12. Jak przeanalizować wartość Json w telefonie iPhone?
- 13. Pobieranie obrazów i zapisywanie lokalnie na telefonie iPhone Aplikacja Phonegap
- 14. Jak zatrzymać UIView CABasicAnimation w telefonie iPhone
- 15. Debuguj niejasny błąd na telefonie iPhone
- 16. Jak poprawnie pobierać pliki przez HTTP przez python-urllib2?
- 17. Jak cofnąć i ponowić płynną linię w telefonie iPhone?
- 18. Jak przekonwertować NSData na tablicę bajtów w telefonie iPhone?
- 19. Jak uzyskać dostęp do hiperłączy w dokumentach PDF (iPhone)?
- 20. Jak uzyskać listę wszystkich plików wideo w telefonie iPhone?
- 21. Tworzenie pliku PDF z pliku CSV na telefonie iPhone
- 22. Jak pobierać pliki .flow stron trzecich?
- 23. Wyskakujące powiadomienie o telefonie iPhone
- 24. Android Glide: jak pobierać i zapisywać mapy bitowe w pamięci podręcznej?
- 25. Jak wykonywać operacje podczas odtwarzania dźwięku w telefonie iPhone?
- 26. Testowanie poza warunkami kosmicznymi w telefonie iPhone
- 27. Używanie uwierzytelniania HTTP Digest w telefonie iPhone
- 28. Jak poprawić wydajność wkładki obiektu Core Data na telefonie iPhone?
- 29. Udostępnianie edytowalnych i niemożliwych do edycji pól w telefonie iPhone
- 30. Zrezygnuj z aplikacji Cydia do instalacji na nieobsługiwanym telefonie iPhone
Dzięki ! Ummm ... Synchroniczny? Czy to oznacza, że lepiej użyć "koła postępu/paska" podczas wykonywania pracy? – RexOnRoids
Synchroniczne oznacza, że cała aktywność w twoim programie (no, główny wątek) zostanie całkowicie zatrzymana do czasu zakończenia pobierania. Oznacza to, że interfejs użytkownika będzie zamrożony dla użytkownika, a błystki nie zaczną nawet animować, dopóki nie zostanie ukończone pobieranie (co czyni je całkiem bezużytecznymi). Druga metoda, asynchroniczne pobieranie, pozwala programowi kontynuować pracę na pierwszym planie podczas pobierania w tle. Tak czy inaczej, tak, powinieneś użyć jakiegoś wskaźnika postępu. – Tim