Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective-C文件读取_Objective C_Xcode - Fatal编程技术网

Objective-C文件读取

Objective-C文件读取,objective-c,xcode,Objective C,Xcode,我正在学习如何编写简单的Objective-C程序(没有GUI)。我创建了一个新的xcode项目,在顶级目录中有以下文件: main.m data.txt 如何将data.txt的内容作为NSString获取,以便在main.m中使用 我试过: + (NSString *)loadTextFileToString:(NSString*)fileDest { NSString *filePath = [[NSBundle mainBundle] pathForResource:fileD

我正在学习如何编写简单的Objective-C程序(没有GUI)。我创建了一个新的xcode项目,在顶级目录中有以下文件:

main.m
data.txt
如何将data.txt的内容作为NSString获取,以便在main.m中使用

我试过:

+ (NSString *)loadTextFileToString:(NSString*)fileDest {
    NSString *filePath = [[NSBundle mainBundle] pathForResource:fileDest
                                                     ofType:@"txt"];
    NSError *error = nil;
    NSString *fileContent = [NSString stringWithContentsOfFile:filePath
                                                  encoding:NSUTF8StringEncoding
                                                     error:&error];
    if(error) {
        NSLog(@"ERROR while loading from file: %@", error);
    }
    return fileContent;
}
并将@“data”作为参数传递,但它给了我一个错误:

ERROR while loading from file: Error Domain=NSCocoaErrorDomain Code=258 "The file name is invalid."

正确的方法是什么?

命令行项目,嗯


您需要将文件的路径作为参数传递给程序,然后使用
[[NSProcessInfo processInfo]arguments]
获取路径。您不能只是命名一个文件,并希望运行时的工作目录与文件实际所在的位置有任何对应关系;您需要以某种方式指定完整路径。

您的代码实际上是完全正确的。问题在于您的XCode项目。当您运行程序时,它会从“Products”目录运行,其位置取决于您的XCode设置。如果希望data.txt文件最终与可执行文件位于同一位置,以便在运行时可以找到该文件,则需要将该文件添加到“复制文件”构建阶段,并将目标设置为“产品”文件夹:


这真的是唯一的解决方案吗?例如,在eclipse中使用java项目时,我能够使用以“src/”开头的相对文件路径。因此,如果这是一个java项目,我会使用“newfile”(“src/data.txt”)”将文件data.txt加载到项目的顶级目录中。我可以用xcode/objective-c做些类似的事情吗?@kmell96这完全取决于工具运行时“当前工作目录”的位置。如果将“src/data.txt”作为文件路径传递,则该路径将被解释为相对于该CWD。在测试命令行工具时,我通常只在arguments窗格中提供完整路径,或者提供~/testfiles/project/foo.txt并将示例数据保存在那里。a谢谢您的回答。即使有了那张照片,我也不知道该怎么做。首先,我如何进入该屏幕(具有构建设置/构建阶段/构建规则的屏幕)?是的,我可能会裁剪得更好。在XCode主窗口的左侧,单击“项目导航器”,工具栏中最左侧的图标。然后单击项目中文件列表顶部的项目图标,您将看到项目设置。是的,修复了它。谢谢还值得注意的是(至少在我直接从xcode运行的情况下),您还必须取消选中“仅在安装时复制”框,并删除默认子路径,才能使其工作。