2015-11-02 23 views
6

iOS'ta 9+ Dosyadan okumaya yönelik herhangi bir girişimde bulunmayın. Bu durumda dosya bir görüntü dosyası yoludur. Ben kaldırdık
"file: //" yolundan ve şimdi bir izin sorunu variOS 9 dosya izni için izin ver

NSData(contentsOfFile: stringpath, options: NSDataReadingOptions.DataReadingUncached) 

veya

NSData(contentsOfFile: stringpath) 

Eylemler kullanılarak
.

Hata Alan = NSCocoaErrorDomain Kodu = 257 "Dosya‘IMG_0048.JPG’bunu görüntüleme izni yok çünkü açılamadı." UserInfo =

Eklediğim {NSFilePath =/var/mobile/Medya/DCIM/100APPLE/IMG_0048.JPG, NSUnderlyingError = 0x13f978f50 {Hata Alan = NSPOSIXErrorDomain Kod = 1} "İşleme izin verilmedi"} NSAllowArbitraryLoads ve bunu doğru olarak ayarla. Yalnızca iOS korumalı alanın içinde dosyalara erişimi apps çünkü
Kendimi ancak yolları

+0

Bu yollar nasıl gidiyor? Görünüşe göre kamera/galeriye ait görüntülere erişiyorsunuz –

+1

Yoldaki hata. Önce yolunuzu dize formatında alın. Daha sonra dosya yolunu kullanarak URL'yi bulun. Daha sonra verilen URL'de içerik bulun. –

+0

https://github.com/mikaoj/BSImagePicker kullanarak PHAsset'in görüntünün yolu olan "PHImageFileURLKey" adlı bir değeri vardır –

cevap

1

Büyük olasılıkla bu hatayı alıyorsanız hiçbir şekilde uyuşmuyor "NSSearchPathDirectory" seçeneğini kullanarak dosyayı aramak için çalıştık . Ayrıntılar için dosya sistemlerinde Apple documentation'a bakın.

4

Aynı hatada birden çok dosyaya erişmeye çalıştığım için bu hatayla karşılaştım. Benim için çalışan düzeltme, bir sonraki dosya URL'sini almaya çalışmadan önce, her dosya URL'sinin alındığı kod yapısını değiştirdi, ardından okudu.

+0

Bunun neden olduğunu biliyor musunuz? Ayrıca, her bir URL nasıl elde edilir? AVAsset'ten mi? – Shade

+1

Benzer bir sorun yaşadım. PHImageManager.defaultManager(). RequestAVAssetForVideo() 'aracılığıyla bir dosya sistemi URL'si alıyorum. Bu URL'yi 'NSFileManager''den bir kereden fazla kullanmaya çalışırsam ikinci kez bir hata alıyorum.Benim durumumda, bir geçici çözümüm var: Dosyayı kopyalarım ve onunla başka şeyler yapıyorum. İkinci "NSFileManager" işlemi için yeni kopyasına (orijinal yerine) erişirsek çalışır. Güvenlik meselesi olmalı. Tuhaf... –

0

Uygulamanızda, Sandboxing nedeniyle /var/mobile/Media/DCIM/100APPLE/IMG_0048.JPG dosyasına erişme izniniz yok.

Peki, ne yaparsanız yapın, dosya yolu ile NSData veya UIImage'u başlatamazsınız. Ancakile /var/mobile/Media/DCIM/100APPLE/xxx.mov dosyasına erişebilirsiniz. Uygulamamda, Fotoğraflar kitinden galeriden URL yerine veri ayıkladım ve verilerle UIImage başlatıldı.

PHImageManager.default().requestImageData(
    for: assetObject!, options: options, 
    resultHandler: { 
     data, _, _, _ in 
     if data != nil { 
      self.assetUrl = movieMaker.createMovieFrom(imageData: data!, duration: Int(CXPreparetValue.imageDuration)) 
     } 
}) 

benim için çalışıyor! Başka görüşleriniz varsa, lütfen bana söyleyin.

0

Benim durumumda, dosya izinleri çok kısıtlayıcıydı, bu yüzden dosyayı okuyamadım.

Dosyaya erişmeden önce okuma + yazma izinlerini ekleme.

do { 
    // Retrieve any existing attributes 
    var attrs = try FileManager.default.attributesOfItem(atPath: stringpath) 
    let existing = (attrs as NSDictionary).filePosixPermissions() 
    // Set the read+write value in the attributes dict 
    attrs[.posixPermissions] = existing | 0b110000000 
    // Update attributes 
    try FileManager.default.setAttributes(attrs, ofItemAtPath: stringpath) 

    // Read data from file 
    let data = try Data(contentsOf: URL(fileURLWithPath: stringpath, isDirectory: false), options: .uncached) 
    print("success: \(data.count)") 
} catch { 
    print(error) 
}