2016-11-21 10 views
1

現在、単語の辞書の解析が必要なiOSアプリで動作しています。txtファイルをiOSアプリに読み込むときにエラーが発生する

ファイルをインポートして内容を文字列に変換しようとすると、let path:String = Bundle.main.path(forResource: "words", ofType: "txt")!行でエラーが発生します。エラーはスレッド1です: "EXC_BREAKPOINT(コード= 1、サブコード= 0x1002e11ec)"

ご協力いただければ幸いです。

注:

let path:String = Bundle.main.path(forResource: "words", ofType: "txt")! 
text = try! String(contentsOfFile: path, encoding: String.Encoding.utf8)  
words = text.components(separatedBy: ("\n")) 

enter image description here

答えて

2

Bundle path(forResource:ofType:)添付資産のスクリーンショットは、オプションのStringを返します。オプションのアンラップを強制しています。戻り値がnilのときにクラッシュします。

実際にそのようなファイルがアプリのリソースバンドルに存在しない場合は、nilを返します。

  1. 実際には、アプリのバンドルにwords.txtという名前のファイルが必要です。ファイル名の大文字と小文字が一致していることを確認し、ファイルがターゲットに選択されていることを確認します。
  2. 一般に、オプションを強制的に展開しないでください。クラッシュします。しかし、あなたが投稿したコードの2つのforce-unwrapは、アプリが正常に動作してもクラッシュすることはないと主張することができます。最初のファイルは、まだファイルをリソースバンドルに適切に配置していないため、クラッシュするだけです。 2番目のファイル(try!)は、指定されたエンコーディングで有効なテキストファイルであることがわかっているため、ファイルが正しいとクラッシュしません。
+0

私はSwiftの新しい選択肢を本当に理解しています。「Swiftのオプションを理解するまで、force-unwrap演算子は存在しません。 –

+0

@rmaddyアドバイスありがとうございますが、ファイルのようです –

+1

Xcodeでデータセットを使用することはありませんでしたので、どうやってそのようなファイルにアクセスするのか分かりません。あなたのアプリケーションのリソースバンドル。データセットにテキストファイルがある理由がわかりません。 – rmaddy

0

データセットを使用しないでください。あなたのtxtファイルをファイルナビゲータにドラッグするだけです。

enter image description here

さらに説明するのは、あなたが見ているエラーは、使用しているということです!そのリソースのパスがバンドル内に存在することを保証していると言います。それはありません。

関連する問題