2009-10-03 16 views
73

Yerel bir dosyanın yolunu (belgeler klasöründe) veren bir NSURL nesnesine sahibim. Bu dosyanın içeriği ile bir NSData nesnesini doldurmak istiyorum. dataWithContentsOfURL: kullanarak çalıştı, ancak bu başarısız. Dosya var biliyorum çünkü iPhone SDK yolu döndürür.iPhone - Yerel dosyanın URL'si NSData

Birisi, yerel bir dosyanın URL sitesinden NSData nesnesini nasıl alabileceğimi söyleyebilir mi?

Teşekkürler.

+0

"Ancak başarısız" ne anlama geliyor? – Marco

+0

Bu noktada donması anlamına gelir! Bir istisna verir. Bir videonun verilerine erişmeye çalışıyorum, UIImagePickerController – lostInTransit

+0

'dan aldığımız URL'ler NURL olmayan bir nesneyi iletmeye çalışıyorsunuz. Dosya URL'sini nasıl alıyorsunuz, bir URL ve bir NSString olmadığından emin misiniz? – Marco

cevap

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

contentOfFile bir NSString dosyasını dosya yolu ile alır. NSURL nesnesini alıyorum. – lostInTransit

+0

Emin değilim, ancak ayırma yerine defaultManager'ı kullanarak init, iş parçacığı sorunlarına neden olabilir. – carlossless

+2

[NSFileManager dokümanlar] (https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSFileManager_Class/Reference/Reference/Reference.html) bunu Threading Considerations (El İşi Dikkate Alınması Gerekenler) başlığı altında söyler: " Paylaşılan NSFileManager nesnesinin yöntemleri birden çok ileti dizisinden güvenle çağrılabilir. " Not ettikleri tek istisna, dosya yöneticisinin işlemlerinden temsilci geri bildirimlerini ele almak isterse; Burada geçerli olduğuna inanmıyorum. – Tim

24

sadece yapmanız gereken bu iş bulmak için:

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

yerel URL ile başlar emin olun "file: //" o zaman sadece bunu yapmak zorunda olacaktır:

swift3 için
NSData *fileData = [NSData dataWithContentsOfFile:fileURL.path]; 
+0

URL altında bulabileceğiniz dosyanın 'Tam Yolu' olduğunu unutmayın, her zaman varlık kütüphanesi olarak döndürülür: //asset/asset.MOV? Id = 095AA9E9-A4F5-4035- 9A21-3CFF04F45C70 & ext = MOV @ahbou –

+0

Bu sadece Varlıklar (Fotoğraflar ve videolar) için geçerlidir. OP, – ahbou

+0

belgesindeki bir dosya hakkında, seçili url fro asset_library öğesinden veri nesnesi oluşturduğumda yanılıyorsa bu bana nil @ahbou verir –

0

Ben yararlı aşağıdaki URL'den cevap buldu

:(///var/mobile/Containers/Data/Application/B64B06DE-7976-45CF-9BE2-661F0F309A06/tmp/abcded.jpg ben PhoneGap plugin

dosyasını kullanarak görüntüyü yakalama sonra aşağıdaki yolu başlamıştı)

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

eğer videoURL = URL izin (string: urlString), VideoData = deneyelim? Veri (contentOf: videoURL) { // Alamofire kodunu buraya ekleyin }

İlgili konular