2013-04-21 55 views
0

我的项目中有一个名为a00.PGN的PGN文件,我想解析它以便将其预加载到Core Data中。现在,我作为使用如何在目标中读取PGN文件进行解析 - c

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

NSLog字符串只是想输出文件,我得到一个错误:错误域= NSCocoaErrorDomain代码= 258“文件名是无效的。”

当我NSLog的字符串内容是NULL。

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

编辑1:

要在自己的项目文件我拖着从取景器。然后我转到我的项目目标,并将其添加到Copy Files部分,并将产品目录作为目标。子路径是空的。

编辑2:

我已经上传了这个简单的项目的当前状态,以回购在这里:https://github.com/justinjdickow/PGN-Parse-into-Core-Data/

+0

只存储要存储在Core Data中的映像的路径要快得多。否则你的数据库将会变得非常快!您可以像iPhoto或Aperture那样为您的图像创建一个“容器”。 – HAS 2013-04-21 20:21:14

+0

它是一个图像或只是一个非标准文件扩展名? – Mundi 2013-04-21 20:25:09

+0

这只是一个非标准的文件扩展名。这是一个我可以用任何文本编辑器阅读的文本文件。这不是一个图像。 – JuJoDi 2013-04-21 20:34:03

回答

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 

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

最简单的方法是将Copy Files构建阶段添加到命令行工具目标中。将目标指定为产品目录,并将A00.PGN文件包含在要复制的文件列表中。

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

+0

这些信息包含在我所关注的教程中,所以我已经完成了。其中包含a00.PGN文件,其中包含自动输入的“产品目录”和子路径“usr/share/man/man1”的目的地。我也确保我的字符串与文件名相匹配。我如何确认产品目录的子路径?还有什么可能导致这个错误? – JuJoDi 2013-04-22 01:46:25

+1

您应该删除子路径条目。这可能有从默认的“复制文件”,这是为了“人页”(文档帮助文件)为您的工具到相应的位置复制生成阶段。既然你重用你的目的是相同的阶段,你应该删除子路径项,否则将被复制到'... /编译/产品/调试的/ usr/share/man中/男1/a00.PGN'代替'.../Build/Products/Debug/a00.PGN'。或者,您可以创建2个独立的复制文件阶段,并将各个文件复制到每个文件的相应位置。 – NSGod 2013-04-22 07:41:07

+0

我删除了路径,仍然收到相同的错误。我也尝试使Subpath与包含在我的数据路径字符串中的路径相同。 – JuJoDi 2013-04-22 16:22:48

0

注意pathForResource:ofType:具有取决于它是否是iPhone模拟器或iPad模拟器或不同的大小写装置。

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

+0

这是一个在xcode中构建的Objective-C命令行工具,虽然我尝试过将实际文件的大小写匹配到一起也无济于事。 – JuJoDi 2013-04-21 20:34:51