17

我正在尝试将文件加载到字符串中。这是我正在使用的代码:

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 文件中可能导致此错误发生的任何内容?

非常感谢,

山姆

4

6 回答 6

10

我刚刚花了 45 分钟解决这个问题,只是在我的情况下,解决方案很愚蠢,问题略有不同。

  • 我的资源目录中有一个名为 Playlist.txt 的文件。它加载得很好。
  • 该文件曾在 XCode 中进行过一次修改。
  • 该文件停止正确加载,并出现与上述相同的错误。然而,它从未被移动过,也没有改变它的编码类型。
  • 我对 XCode 目录中的文件执行了命令-I(获取信息),它告诉我它是 UTF-8(如预期的那样)。
  • 我尝试了“usedEncoding”读取文件的方式,没有骰子。同样的错误,编码返回null。
  • 最后,我从 XCode 中删除了该文件,再次将其拖入,然后执行了 Clean All。这解决了问题。

这不是 XCode 第一次(错误地)神奇地缓存东西给我浪费了数小时的时间。如果您遇到此类没有意义的错误,请尝试删除和替换文件并清理所有目标。

于 2009-12-15T18:33:25.740 回答
8

错误几乎可以肯定是您的文件不是 UTF-8,但您是对的,这听起来确实像错误报告中的错误。

使用 BBEdit(或免费的 TextWrangler)打开 eula 文件,查看它使用的编码。将编码更改为 UTF-8 并保存。比较这两个文件以查看出现了哪些差异。用新文件替换原始文件(修复任何故障)。

如果这样可以解决问题,请使用Apple Bug Reporter在错误报告中报告错误。

于 2009-06-16T01:47:47.603 回答
4

我和你有同样的错误,使用带有 [[NSBundle mainBundle] pathForResource:@"pageList" ofType:@"txt"]] 的文件名祝你好运!

于 2010-10-27T09:10:31.307 回答
3

在这种情况下失败的最可能原因+stringWithContentsOfFile:encoding:error:是您提供了错误的编码。您确定您的@"eula"文件是 UTF8 编码的吗?

如果您不确定文件的编码,您可以随时尝试+stringWithContentsOfFile:usedEncoding:error:查看它是否有效以及它提供了什么编码。

于 2009-06-16T00:09:00.477 回答
0

不知道这是否是你的问题,但我只是有一个类似的东西(stringWithContentsOfFile,没有 JSON),问题是该文件有 CRLF(windows)行尾和西方 - 不管它是什么 - 所谓的编码。我使用 SubEthaEdit 转换为 LF 和 UTF-8,一切正常。

于 2010-05-21T05:04:25.380 回答
0

我遇到了同样的错误。

当我玩了一下时,似乎我没有将文件包含在目标的副本包资源中。

我这样做了,效果很好。

但是,不得不说——对于这样一个简单的原因,错误是相当具有误导性的。只是 Xcode 的一个错误猜测

于 2014-05-13T09:14:22.420 回答