iPhone - Yerel dosyanın URL'sinden NSData


85

NSURLBana yerel bir dosyanın yolunu (belgeler klasöründe) veren bir nesnem var . NSDataBu dosyanın içeriğiyle bir nesneyi doldurmak istiyorum . Kullanmayı denedim dataWithContentsOfURL:ama bu başarısız Dosyanın var olduğunu biliyorum çünkü iPhoneSDK yolu döndürüyor.

Biri bana yerel bir dosyadan nasıl bir NSDatanesne alabileceğimi söyleyebilir URLmi?

Teşekkürler.


"Ama başarısız oluyor" ne anlama geliyor?
Marco

Bu noktada donduğu anlamına gelir! Bir istisna verir. Bir videonun verilerine erişmeye çalışıyorum, URL'sini UIImagePickerController
lostInTransit

NURL olmayan bir nesneyi geçirmeye çalıştığınız anlaşılıyor. Dosya URL'sini nasıl alıyorsunuz, bir URL olduğundan ve NSString olmadığından emin misiniz?
Marco

@AliKhaki: Lütfen önemsiz düzenlemeler yapmayın, değişikliklerinizi incelemek için inceleme kuyruğundaki iki kişi gerekir. İyileştirmek için bir soruyu düzenlerseniz, "teşekkürler" gibi gereksiz şeyleri kaldırabilirsiniz, ancak soruyu sadece bunun için düzenlemeyin. Teşekkürler!
Cris Luengo

Yanıtlar:


163

Swift kodu:

let data = FileManager.default.contents(atPath: path)

1
contentOfFile, dosya yolu ile bir NSString alır. NSURL nesnesi alıyorum.
lostInTransit

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

2
NSFileManager dokümanlar bu Threading Hususlar altında söylemek zorundayım: "Paylaşılan NSFileManager nesnenin yöntemleri güvenle birden çok iş parçacığı çağrılabilir." Not ettikleri tek istisna, dosya yöneticisinin işlemlerinden temsilci geri aramalarını işleme almayı planlamanızdır; Bunun burada geçerli olduğuna inanmıyorum.
Tim

Yolun dosyanın 'Tam Yol' olduğuna dikkat edin, dosyayı XCode File Inspector
Burak

29

Bu işi almak için yapmanız gerekenler:

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];

2

Yerel URL'nizin "file: //" ile başladığından emin olun, ardından bunu yapmanız gerekir:

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

url her zaman varlıklar kitaplığı olarak döndürülür: //asset/asset.MOV? id = 095AA9E9-A4F5-4035-9A21-3CFF04F45C70 & ext = MOV @ahbou
Mansuu ....

Bu yalnızca Varlıklar (Fotoğraflar ve videolar) için geçerlidir. OP, belgeler klasöründen bir dosya hakkında soru soruyor
ahbou

asset_library için seçilen url'den veri nesnesi oluşturduğumda bana nil veriyor @ahbou
Mansuu ....

Varlıklar yalnızca AssetsLibrary veya Photos.framework tarafından işlenir. Bir varlığı almak için, asset.assetForURL {} 'yi çağırmanız gerekir Bu yöntemi arayın veya bu ayrı bir konu olarak yeni bir soru sorun.
ahbou

0

Swift3 için aşağıdaki URL'den yararlı buldum

(Phonegap eklentisini kullanarak görüntüyü yakaladıktan sonra aşağıdaki yolu alıyordum

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

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

videoURL = URL (string: urlString) izin verirseniz, videodata = deneyin Data (contentOf: videoURL) {// Alamofire kodunu buraya ekleyin}


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.