使用Objective-c使用[NSString stringWithContentsOfFile ...]读取本地文本文件的问题返回null

时间:2012-01-16 05:49:11

标签: objective-c xcode

这似乎并不那么复杂。我只想创建一个字符串对象,其中包含一个名为“test.txt”的本地文本文件的内容,我已将其放在项目的根目录中。

我正在尝试使用以下代码加载它。

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"txt"];    
NSString *textData = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];


//The below works, but not my above... not sure why.
//textData = @"TEST TEST";


NSLog(@"Some text from a file of %@", textData);
NSLog(@"The length of the string is %lu", [textData length]);

此代码的输出是 “来自(null)文件的一些文本” “字符串的长度为0”

我不确定为什么这会返回null而不是我的文本文件的内容。该文件的编码似乎是合适的。此外,该文件存在。我是否将文件拖到错误的位置?我是否必须以某种方式将其添加到我的NSBundle mainBundle中?

谢谢!

6 个答案:

答案 0 :(得分:5)

如果您实际填写了error中的+stringWithContentsOfFile:encoding:error:参数,那么会告诉您它返回nil的原因。你真的应该这样做。可能的原因是该路径上没有文件(或者您没有权限读取它)。

答案 1 :(得分:0)

NSLog filePath并查看它是否为零。如果filePath为nil,我认为你没有把文件放在正确的位置。您应该将文件拖到Xcode中项目的项目导航器中。 另外,仔细检查文件名。

答案 2 :(得分:0)

记录你的filePath以查看它是否可以实际找到该文件,如果没有,你可能以错误的方式添加你的test.txt。要添加到主捆绑包,请将test.txt拖到xcode项目中,出现提示时,只需勾选将项目复制到目标组的文件夹(如果需要),然后选择为任何添加的文件夹创建组。

答案 3 :(得分:0)

这里的所有答案都有所帮助。特别是填写错误的建议:以不返回nil的方式。

最终我发现我必须手动将我尝试打开的.txt文件复制到与编译的二进制文件相同的目录中。只是将它复制到xcode项目似乎对我没用。

答案 4 :(得分:0)

我和你有完全相同的问题,文森特。我的理解是因为我正在制作一个基于控制台的应用程序,它不会像iOS应用程序那样编译和包含文件包中的文件。因此,它不包括预期的文件。我可以通过在硬盘上输入文件的完整目录位置来实现它。

答案 5 :(得分:0)

将test.txt文件拖放到Build Phases->复制包资源