笑ったり泣いたりしないでください-20年後にコーディングに戻りました...
4時間以上参照を見てコードスニペットを試してBundle.main.pathを取得し、テキストファイルを開いてアプリのデータを読み込むことができるようにしました(次のステップは適切に解析することです) )。
if let filepath = Bundle.main.path(forResource: "newTest", ofType: "txt")
{
do
{
let contents = try String(contentsOfFile: filepath)
print(contents)
}
catch
{
print("Contents could not be loaded.")
}
}
else
{
print("newTest.txt not found.")
}
結果:「newTest.txtが見つかりません。」ファイルをプロジェクトにドラッグ&ドロップする方法に関係なく、Xcode内でファイルを作成するか、[ファイル]-> [ファイルを追加...]メニュー項目を使用します。
問題は、ファイルがアプリバンドルに対応していないことです。修正するには:
Swift 3.
let fileNmae = "demo"
let path = Bundle.main.path(forResource: fileNmae, ofType: "txt")
do {
let content = try String(contentsOfFile:path!, encoding: String.Encoding.utf8)
print(content)
} catch {
print("nil")
}
Swift 2.
do{
if let path = NSBundle.mainBundle().pathForResource("YOURTXTFILENAME", ofType: "txt"){
let data = try String(contentsOfFile:path, encoding: NSUTF8StringEncoding)
let myStrings = data.componentsSeparatedByCharactersInSet(NSCharacterSet.newlineCharacterSet())
print(myStrings)
}
} catch let err as NSError {
//do sth with Error
print(err)
}
出力:
Hello Hems
Good Morning
I m here for you dude.
Happy Coding.
file.txt
をプロジェクトに追加すると、プロジェクトのCopy Bundle Files
に自動的に追加されました。私にとっては、forResource
から拡張機能を削除する必要があり、機能しました。
let path = Bundle.main.path(forResource: "file", ofType: "txt") // not forResource: "file.txt"
ああ、OPとまったく同じ問題に対処していることに気づきました。
問題は、add files
のOptions
メニューが異なるため、コードがプレイグラウンドで実行されているときに here および here が指定されたソリューションが機能しないことです。 Add to targets
フィールドは表示されません。
.playground
ファイル内で、代わりにXcodeウィンドウの右上にあるHide or show the Navigator
ボタンを押します(視覚的印象)->
次に、ナビゲータがXcodeウィンドウの左側に開いたら、プレイグラウンドのResources
ディレクトリにファイルをドラッグアンドドロップします。
セットアップが次のようなものであれば、大丈夫です:
同じ問題、わずかに異なる状況と解決策。私は次のコードを使用するように言ったチュートリアルに従っています:
// Start the background music:
if let musicPath = Bundle.main.path(forResource:
"Sound/BackgroundMusic.m4a", ofType: nil) {
print("SHOULD HEAR MUSIC NOW")
let url = URL(fileURLWithPath: musicPath)
do {
musicPlayer = try AVAudioPlayer(contentsOf: url)
musicPlayer.numberOfLoops = -1
musicPlayer.prepareToPlay()
musicPlayer.play()
}
catch { print("Couldn't load music file") }
}
}
私は他の人と同じ問題を抱えていましたが、解決策のどれも問題を解決しませんでした。実験の後、次の呼び出しでパスからSoundを削除するだけで、すべてが機能しました。
Bundle.main.path(forResource: "BackgroundMusic.m4a", ofType: nil)
パスにSoundを含めるように指示することで、チュートリアルがエラーになったように見えます。
これは私にとって役に立ちました: xcode-フォルダ構造をアプリバンドルにコピーします
ネストされたフォルダーにアセットを作成するときに、「フォルダー参照の作成」オプションをマークします。
次に、次のようなファイルへのパスを見つけます。
let path = Bundle(for: type(of : self)).path(forResource: "some_folder_a/some_folder_b/response.json", ofType: nil)
inDirectory:
メソッドは必要ないと思います。代わりにこれを試してください:
if let filepath = Bundle.main.path(forResource: "newTest", ofType: "txt") {