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.