NSString-initWithContentOfFile错误-Objective-C

NSString-initWithContentOfFile错误-Objective-C,objective-c,nsstring,Objective C,Nsstring,我正在尝试将名为names.txt的文件内容加载到项目目录中的NSString。为此,我有以下代码: NSError *error = nil; NSString *names = [[NSString alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"names" ofType:@"txt"] encoding:NSASCIIStringEncoding error:&error

我正在尝试将名为
names.txt的文件内容加载到项目目录中的
NSString
。为此,我有以下代码:

    NSError *error = nil;
    NSString *names = [[NSString alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"names" ofType:@"txt"] encoding:NSASCIIStringEncoding error:&error];
    if (error != nil) {
        [NSException raise:@"Error reading file :" format:@"%@",error];
    }

我收到
***由于未捕获的异常“读取文件时出错:”,正在终止应用程序,原因是:“Error Domain=nscocaerordomain code=258”文件名无效。“
。我找不到其他类似的病例。此代码有什么问题?

确保您的names.txt文件包含在目标的Xcode Build Phase窗口的Copy Bundle Resources区域下

在调试器中,您可以使用以下命令测试有效的捆绑包文件:

  ...
  NSString *file  = [[NSBundle mainBundle] pathForResource:@"names" ofType:@"txt"];
  /* FILE ought not be nil. NSAssert (file) */
  NSString *names = [[NSString alloc] initWithContentsOfFile: file
                                                    encoding: NSASCIIStringEncoding
                                                       error: &error];
不,不,那不是正确的测试。测试是

if (nil == names) {

error
的值不会告诉您我们是否成功。返回的nil值告诉您是否存在问题。然后,也只有在那时,您才能读取错误。

pathForResource:ofType:
找不到文件,正在返回
nil
。您确定扩展名是
txt
?您是否右键单击了
Finder
中的文件,单击了“获取信息”并检查了“名称和扩展名”下的扩展名?我确定,该文件的名称是
names
,扩展名是
txt
是在mac还是在ios上?您已经尝试过
pathForResource:ofType:inDirectory:
了吗?我正在Mac上工作,没有,还没有尝试过。当我记录
文件时,我得到
(null)
,该文件位于Xcode项目的主文件夹下……这意味着该文件不是应用程序包的一部分。该文件需要列在“复制捆绑资源”下;在那里检查。如果您将names.txt放入“Supporting Files”组,则它可能会自动添加到“Copy Bundle Resources”中。好的,现在请确保它列在“Copy Bundle Resources”下。(选择“项目”;然后选择“目标”;然后选择“构建阶段”;然后打开“复制捆绑资源”并检查names.txt。)没有“复制捆绑资源”之类的东西,有“复制文件”,在那里添加了文件,没有任何更改。然后确保已复制。在
目的地附近玩一玩(先试试“资源”,如果“资源”不起作用,就试试其他资源)。我知道。但是我不能容忍你做错了,这会给你带来严重的麻烦。所以,为了理解这一点,有没有可能错误不是零并且字符串已经成功生成?这是可能的。除非字符串为nil,否则无法保证错误的值!
if (nil == names) {