0

我的项目中有一个名为 a00.PGN 的 PGN 文件,我想将其解析为“预加载”到 Core Data 中。现在我只是想用NSLog使用将文件输出为字符串

    NSError *err = nil;
    NSString *datapath = [[NSBundle mainBundle] pathForResource:@"a00" ofType:@"PGN"];
    NSString *content = [NSString stringWithContentsOfFile:datapath encoding:NSASCIIStringEncoding error:&err];
    NSLog(@"%@", err);

我收到一个错误:Error Domain=NSCocoaErrorDomain Code=258“文件名无效。”

当我 NSLog 字符串内容时,它为 NULL。

我尝试将扩展名更改为 .txt,但收到相同的错误,并且还使用了 NSUTF8StringEncoding。在这个文件中读取以在objective-c中解析的最佳方法是什么?

编辑1:

为了在我的项目中包含该文件,我将它从 finder 中拖了出来。然后我转到我的项目目标并将其添加到Copy Files以产品目录为目标的部分。子路径为空。

编辑2:

我已将这个简单项目的当前状态上传到此处的仓库:https ://github.com/justinjdickow/PGN-Parse-into-Core-Data/

4

2 回答 2

2

根据技术问答 QA1436:命令行基础工具的“主要捆绑包”是什么?——实际上,该文件(部分)是错误的。

在命令行工具可执行文件中,主包的路径将是包含可执行文件本身的目录。例如,在我在这里创建的示例命令行工具项目中,控制台记录了以下内容:

mainBundle == NSBundle <~/Library/Developer/Xcode/DerivedData/mainBundle-bqmiidcdlnwumjgcnblqgtelpecl/Build/Products/Debug> (loaded),
bundlePath == ~/Library/Developer/Xcode/DerivedData/mainBundle-bqmiidcdlnwumjgcnblqgtelpecl/Build/Products/Debug

换句话说,主包将是您的内置产品目录。为了能够在运行时找到“A00.PGN”文件,该文件需要与可执行文件一起位于您的内置产品目录中NSBundlepathForResource:ofType:例如,就我而言,我需要文件位于~/Library/Developer/Xcode/DerivedData/mainBundle-bqmiidcdlnwumjgcnblqgtelpecl/Build/Products/Debug/A00.PGN

实现这一目标的最简单方法是向Copy Files命令行工具目标添加构建阶段。将 Destination 指定为 Products Directory,并将 A00.PGN 文件包含在要复制的文件列表中。

此外,正如其他人已经提到的,NSBundle即使 OS X 上的底层 HFS+ 文件系统只是保留大小写, 的搜索方法也是区分大小写的。因此,请确保在代码中指定正确的文件名和文件扩展名。

于 2013-04-21T21:38:36.380 回答
0

请注意,pathForResource:ofType:根据它是 iPhone 模拟器、iPad 模拟器还是设备,它具有不同的大小写敏感性。

确保您始终使用大写/小写。

于 2013-04-21T20:27:00.047 回答