2016-11-14 8 views
7
path = Bundle.main.path(forResource: "Owl.jpg", ofType: "jpg") 

işlevi nil Belgeler klasöründe kaydedilir dosyanın yolunu, bunu Documents/ klasörü altında olduğunu doğrulamak mümkün değilim NSHomeDirectory() kullanarak nasıl alınır.Swift 3: ancak

+3

sizin Bundle Xcode solda gördükleri şeydir. Dokümanlar klasörü, aslında cihazınızda veya simülatörde uygulamanızın içinde oluşturulur, bu yüzden bu dosyayı asla bulamaz. – repoguy

+0

@repoguy, bu size yardımcı olur. Birisi aşağılamayı açıklayabilir mi? – Marin

cevap

16

Birincisi, ayrı isim ve uzantısı:

Bundle.main.path(forResource: "Owl", ofType: "jpg") 

İkincisi, ayrı (zihinsel) sizin demeti ve Belgeler klasörü. Onlar tamamen farklı iki şeydir. Bu dosya Belgeler klasörü ise, kesinlikle ana paketinizde değil! Baykuş varlık katalogda bir görüntü varlıktır o zaman

let im = UIImage(named:"Owl") // or whatever its name is 
+0

Teşekkür ederim Matt! Dosyaları Dokümanlar'daki Paket'e taşımak mümkün mü? – Marin

+0

Hayır, paketinizi değiştiremezsiniz. Paketinizden Dokümanlar klasörüne kopyalayabilirsiniz, ancak başka yoldan gidemezsiniz. Neden bile istiyorsun? – matt

+0

Paket, çoğunlukla xcassets'teki resimlerin doğru olduğu yerdedir? Temelde demetle oynuyor ama bir varlık olan Baykuş bulunmuyor. Ayrıca Dokümanlar altında bulabileceğim ayrı bir görüntü olarak var. – Marin

0

üzerinde test demek,

let fm = FileManager.default 
let docsurl = try! fm.url(for:.documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) 
let myurl = docsurl.appendingPathComponent("Owl.jpg") 

Üçüncüsü: Muhtemelen böyle bir şey istemek 8.3.2 & Swift Xcode 3.1

Dosya dosyanızı (JPG, MP3, ZIP) ilk önce proje klasörünüze sürükleyin ve öğesinin kopyalandığından emin olun. hedeflere KED ve proje/uygulama seçildiğinde ekle alakalı viewController İçindeenter image description here

let fileName = "fileName" 
let fileType = "fileType" 

if let filePath = Bundle.main.path(forResource: fileName, ofType: fileType) { 
    print(filePath) 
} 

Eğer NSBundle yöntemi kullanabilirsiniz dosya URL almak gerekiyorsa

if let fileURL = Bundle.main.url(forResource: fileName, withExtension: fileType) { 
    print(fileURL) 
} 

Ayrıca NSBundle yöntemi pathForResource, dosyalarınızın bulunduğu dizini belirtebileceğiniz bir başlatıcıya sahiptir:

if let filePath = Bundle.main.path(forResource: fileName, ofType: fileType, inDirectory: "filesSubDirectory") { 
    print(filePath) 
} 

Ve dosya URL alınmasına ilişkin :

if let fileURL = Bundle.main.url(forResource: fileName, withExtension: fileType, subdirectory: "filesSubDirectory") { 
    print(fileURL) 
}