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

はnilを返すドキュメントフォルダに保存されたファイルのパス、私はそれがDocuments/フォルダの下にあることを確認することができるよNSHomeDirectory()を使用して取得する方法。スウィフト3:しかし

+3

あなたのバンドルは、あなたがXcodeで、左側に表示されるものです。 Documentsフォルダは実際にはデバイスやシミュレータ上のアプリケーション内に作成されるので、このファイルは決して見つけられません。 – repoguy

+0

@repoguy、ありがとうございます。誰かがdownvoteを説明することはできますか? – Marin

答えて

16

まず、別の名前と拡張子:

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

第二に、別々の(精神的に)あなたのバンドルとドキュメントフォルダ。彼らは2つの全く異なるものです。このファイルがDocumentsフォルダの場合は、メインバンドルには絶対含まれていません!フクロウは、資産のカタログに画像アセットであるならば、

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

マットありがとう! Documents内のファイルをバンドルに移動することは可能ですか? – Marin

+0

いいえ、バンドルを変更することはできません。バンドルからドキュメントフォルダにコピーすることはできますが、それ以外の方法はできません。なぜあなたはしたいのですか? – matt

+0

バンドルのほとんどは、xcassetsの画像が正しい場所ですか?基本的にはバンドルで遊んでいますが、資産であるフクロウは見つかりません。私はまた、ドキュメントの下で見つけることができる別のイメージとしてそれを持っています。 – Marin

0

がでテスト言う、

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

第三:あなたは、おそらくこのような何かをしたい8.3.2 & スウィフトXcodeの3.1

最初にプロジェクトフォルダ内のファイル(JPG、MP3、ZIP)をドラッグし、必要に応じてコピーするはchecですターゲットにKED、プロジェクト/アプリがで選択されている追加の関連のViewControllerインサイドenter image description here

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

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

あなたはNSBundleメソッドを使用することができ、ファイルのURLを取得する必要がある場合は

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

また、NSBundleメソッドpathForResourceには、ファイルがどのディレクトリにあるかを指定できる初期化子があります。

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

とファイルURLを取得する:

if let fileURL = Bundle.main.url(forResource: fileName, withExtension: fileType, subdirectory: "filesSubDirectory") { 
    print(fileURL) 
} 
関連する問題