web-dev-qa-db-ja.com

NSStringstringWithContentsOfFileが間違ったエラーコードと思われるもので失敗する

ファイルを文字列にロードしようとしています。これが私が使用しているコードです:

NSError *error = nil;
NSString *fullPath = [[NSBundle mainBundle] pathForResource:filename 
                                                     ofType:@"html"];
NSString *text = [NSString stringWithContentsOfFile:fullPath 
                                           encoding:NSUTF8StringEncoding 
                                              error:&error];

ファイル名として@ "about"を渡すと、完全に正常に機能し、コードが機能することを示します。ファイル名として@ "eula"を渡すと、「Cocoaエラー258」で失敗し、NSFileReadInvalidFileNameErrorに変換されます。ただし、ファイルの内容を入れ替えても名前を同じにすると、他のファイルは失敗し、ファイル名に問題がないことが証明されます。これは内容に関係しています。

Aboutファイルはかなり単純なHTMLですが、eulaファイルは法務部門によってWordからエクスポートされた大規模な混乱です。

このエラーが発生する可能性のあるHTMLファイル内の何かを知っている人はいますか?

どうもありがとう、

サム

17
deanWombourne

エラーはほぼ確実にファイルがUTF-8にないことですが、その通り、エラーレポートのバグのように聞こえます。

BBEdit(または無料のTextWrangler)でeulaファイルを開き、使用されているエンコーディングを確認します。エンコーディングをUTF-8に変更して保存します。 2つのファイルを比較して、どのような違いが現れたかを確認します。元のファイルを新しいファイルに置き換えます(不具合を修正します)。

それで問題が解決した場合は、 Apple Bug Reporter を使用してエラーレポートでバグを報告してください。

8
Peter N Lewis

私はこの問題に45分を費やしましたが、私の場合のみ、解決策は愚かであり、問​​題はわずかに異なりました。

  • リソースディレクトリにPlaylist.txtというファイルがありました。それはうまくロードされていました。
  • ファイルは、XCode内からある時点で変更されました。
  • 上記と同じエラーで、ファイルの読み込みが正しく停止しました。ただし、移動したことも、エンコードタイプを変更したこともありません。
  • XCodeディレクトリ内のファイルに対してコマンドI(Get Info)を実行しましたが、UTF-8であることがわかりました(予想どおり)。
  • サイコロを使わずに、ファイルを読み取る「usedEncoding」方法を試しました。同じエラー、エンコーディングはnullを返しました。
  • 最後に、XCodeからファイルを消去し、再度ドラッグして、すべてクリーンアップを実行しました。これで問題は解決しました。

XCodeが魔法のように物事を(誤って)キャッシュして、何時間もの無駄な時間を引き起こしたのはこれが初めてではありません。このような意味のないエラーが発生した場合は、ファイルを削除して置き換え、すべてのターゲットをクリーンアップしてみてください。

10
Eli

同じエラーが発生しました。[[NSBundlemainBundle] pathForResource:@ "pageList" ofType:@ "txt"]]でファイル名を使用してください。頑張ってください!

4
baowuwolf

+stringWithContentsOfFile:encoding:error:この場合、間違ったエンコーディングを指定すると失敗します。あなたの@"eula"ファイルはUTF8でエンコードされていますか?

ファイルのエンコーディングがわからない場合は、いつでも試してみてください +stringWithContentsOfFile:usedEncoding:error: 代わりに、それが機能するかどうか、どのエンコーディングが使用されるかを確認してください。

3
Naaff

同じエラーが発生しました。

少し遊んでみると、ターゲットのコピーバンドルリソースにファイルを含めていないようでした。

私はそれをしました、そしてそれはうまくいきました。

しかし、言わなければならないのは、エラーはそのような単純な原因ではかなり誤解を招くものです。 Xcodeからの悪い推測

0
Shailesh

これがあなたの問題かどうかはわかりませんが、私は似たようなもの(stringWithContentsOfFile、JSONなし)を持っていました。問題は、ファイルにCRLF(windows)行末とWestern-whatever-it's-いわゆるエンコーディングがあることでした。 SubEthaEditを使用してLFおよびUTF-8に変換しましたが、すべて正常に動作します。

0
Olie