NSString stringWithContentsOfFile失败,似乎是错误的错误代码

时间:2009-06-15 23:55:42

标签: ios iphone objective-c nsstring

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

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

当传入@“about”作为文件名时,它完全正常,显示代码有效。 当传入@“eula”作为文件名时,它以“Cocoa error 258”失败,转换为NSFileReadInvalidFileNameError。但是,如果我交换文件的内容但保持名称相同,则另一个文件无法证明文件名没有任何问题,这与内容有关。

about文件是相当简单的HTML,但eula文件是由法律部门从Word导出的大量混乱。

有没有人知道HTML文件中可能导致引发此错误的任何内容?

非常感谢,

萨姆

6 个答案:

答案 0 :(得分:10)

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

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

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

答案 1 :(得分:8)

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

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

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

答案 2 :(得分:4)

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

答案 3 :(得分:3)

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

如果您不确定该文件的编码方式,可以随时尝试+stringWithContentsOfFile:usedEncoding:error:,看看它是否有效以及它的编码方式。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

我遇到了同样的错误。

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

我做到了,它运作良好。

但是,不得不说 - 错误对于这么简单的原因是非常误导的。只是来自Xcode的错误猜测