2017-03-01 10 views
0

ファイルから文字列を読み込んで、配列要素ごとにファイルから1行分のテキストを読み込もうとしています。ファイルからiOSを読み取る

私は崇高なテキストを使ってテキストファイルとして入力ファイルを作成しました。プロジェクトディレクトリの中のフォルダの中にあるファイルをxCodeにプロジェクト階層内の同じ場所にあるフォルダにドラッグしました。

バンドルとして追加してみました(フォルダーをコピーして.bundle拡張子を付けて名前を変更する)。現在のところ、私のアプリは2つの場所にファイルを持っています(明らかに不要なバージョンを削除しようとしていますが、これがどのように機能するのかわかりません)。私は私が私のファイルを読み込み、配列にその内容を組み立てたい機能を書いた

:それは現状では

func readFromFile(filename: String) -> [String]? { 

    guard let theFile = Bundle.main.path(forResource: fileName, ofType: "txt") else {   
     return nil // ALWAYS returns nil here: Seems 'filename' can't be found????? 
    } 

    do { // Extract the file contents, and return them as a split string array 
     let fileContents = try String(contentsOfFile: theFile) 
     return fileContents.components(separatedBy: "\n") 

    } catch _ as NSError { 
     return nil 
    } 
} 

、関数は常にコード内のコメントの場所にnilを返します。

私は〜6時間(これはStackOverflow、Googleなどで見つけられるすべての提案を試してみました)、これについて取り組んできました。私はちょうど、さまざまなバージョンのSwiftと複雑さの違いによって、ますます混乱しています。 iOSの開発。私はどこでも一貫した答えを見つけることができないようです。私はリンゴのドキュメントをチェックしましたが、それは私の迅速な初心者レベルで理解するためのサンプルコードなしで高すぎます。

「.txt」という拡張子を付けてファイル名を付けてみましたが、それでも役に立たなかった。

答えて

2

forResource: "alert01", ofType: "txt"とする場合、ファイル名は必ずalert01.txtとする必要があります。

バンドルからのロードは機能しません。ファイルは、最初のエントリに示すようにプロジェクトの一部である必要があります。

ただし、フォルダ参照を作成しているため、コードは機能しません。つまり、フォルダPanicAlertFilesはすべての内容とともにバンドルにコピーされています。あなたのコードはあなたのファイルを取り出すためにそのフォルダに潜入する必要があります。 path(forResource:ofType:inDirectory:)を使用するか、ファイル名を明示的にコーディングする必要がない場合は、フォルダを取得してFileManagerを使用してその内容を調べます。

関連する問題