如何在目标中读取PGN文件进行解析 - c

时间:2013-04-21 20:16:52

标签: objective-c xcode parsing

我的项目中有一个名为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部分,并将Products Directory作为目标。子路径为空。

编辑2:

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

2 个答案:

答案 0 :(得分:2)

根据Technical Q&A QA1436: What is the "main bundle" of a command-line foundation tool? - 实际上,该文件(部分)是错误的。

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

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

换句话说,主捆绑包将是您的内置产品目录。要使NSBundle的{​​{1}}能够在运行时找到“A00.PGN”文件,该文件将与您的可执行文件一起位于您的内置产品目录中。例如,在我的情况下,我需要将文件放在pathForResource:ofType:

实现这一目标的最简单方法是在命令行工具目标中添加~/Library/Developer/Xcode/DerivedData/mainBundle-bqmiidcdlnwumjgcnblqgtelpecl/Build/Products/Debug/A00.PGN构建阶段。将目标指定为产品目录,并将A00.PGN文件包含在要复制的文件列表中。

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

答案 1 :(得分:0)

请注意,pathForResource:ofType:具有不同的区分大小写,具体取决于它是iPhone模拟器还是iPad模拟器或设备。

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