2009-10-03 9 views
73

Mam obiekt NSURL, który podaje mi ścieżkę lokalnego pliku (w folderze dokumentów). Chcę wypełnić obiekt o nazwie NSData. Próbowano za pomocą dataWithContentsOfURL:, ale to się nie udało. Wiem, że plik istnieje, ponieważ iPhone SDK zwraca ścieżkę.iPhone - NSData z lokalnego pliku URL:

Czy ktoś może mi powiedzieć, jak mogę uzyskać obiekt NSData z lokalnego pliku? URL?

Dzięki.

+0

Co oznacza "ale zawiedzie"? – Marco

+0

Oznacza, że ​​zawiesza się w tym momencie! Daje wyjątek. Próbuję uzyskać dostęp do danych wideo, których adres URL otrzymujemy z UIImagePickerController – lostInTransit

+0

Wygląda na to, że próbujesz przekazać obiekt, który nie jest NURLEM. W jaki sposób otrzymujesz adres URL pliku, czy na pewno jest adres URL, a nie NSString? – Marco

Odpowiedz

146
// Given some file path URL: NSURL *pathURL 
// Note: [pathURL isFileURL] must return YES 
NSString *path = [pathURL path]; 
NSData *data = [[NSFileManager defaultManager] contentsAtPath:path];
+1

contentsOfFile pobiera NSString ze ścieżką pliku. Otrzymuję obiekt NSURL. – lostInTransit

+0

Nie jestem pewien, ale przy użyciu defaultManager zamiast alokacji init może powodować problemy z wątkami. – carlossless

+2

Dokumenty [dokument NSFileManager] (https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSFileManager_Class/Reference/Reference.html) mają to do powiedzenia w ramach wątków: "The metody współużytkowania obiektu NSFileManager można bezpiecznie wywoływać z wielu wątków. " Jedyny wyjątek, o którym wspominają, to to, czy zamierzasz obsłużyć delegacje odbierające z operacji menedżera plików; Nie wierzę, że ma to zastosowanie tutaj. – Tim

24

Aby dostać tę pracę po prostu trzeba zrobić:

NSURL *imgPath = [[NSBundle mainBundle] URLForResource:@"search" withExtension:@"png"]; 
NSString*stringPath = [imgPath absoluteString]; //this is correct 

//you can again use it in NSURL eg if you have async loading images and your mechanism 
//uses only url like mine (but sometimes i need local files to load) 
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:stringPath]]; 
UIImage *ready = [[[UIImage alloc] initWithData:data] autorelease]; 
1

Upewnij się, że miejscowy URL zaczyna się od "file: //" wtedy po prostu trzeba to zrobić:

NSData *fileData = [NSData dataWithContentsOfFile:fileURL.path]; 
+0

url jest zawsze zwracana jako biblioteka zasobów: //asset/asset.MOV? Id = 095AA9E9-A4F5-4035- 9A21-3CFF04F45C70 & ext = MOV @ahbou –

+0

Dotyczy tylko zasobów (zdjęć i filmów). OP jest pytaniem o plik z folderu dokumentów – ahbou

+0

, gdy tworzę obiekt danych z wybranego adresu URL z asset_library, który daje mi nil @ahbou –

0

Dla swift3 znalazłem odpowiedź z adresem URL pomocny

(byłem coraz następującą ścieżkę, po przechwyceniu obrazu za pomocą wtyczki PhoneGap

pliku: ///var/mobile/Containers/Data/Application/B64B06DE-7976-45CF-9BE2-661F0F309A06/tmp/abcded.jpg)

https://stackoverflow.com/a/41043447/6383908

jeśli niech videoURL = URL (string: urlString), niech wizyjne = spróbować? Dane (contentsOf: videoURL) { // Dodaj kod Alamofire tutaj }

Powiązane problemy