Objective c 在Objective C中读取文本文件

Objective c 在Objective C中读取文本文件,objective-c,nsstring,textinput,text-parsing,Objective C,Nsstring,Textinput,Text Parsing,我在网站上查看了其他几个人的类似问题,但没有发现任何有助于解决此问题的方法。。。因此,我正在尝试读取一个文本文件,它与我的主程序的目录相同,我也将其导入到项目本身。下面是代码,后面是输出,欢迎任何建议,谢谢 NSString *filePath = [[NSBundle mainBundle] pathForResource:@"allshows" ofType:@"txt"]; NSLog(@"filePath: %@"

我在网站上查看了其他几个人的类似问题,但没有发现任何有助于解决此问题的方法。。。因此,我正在尝试读取一个文本文件,它与我的主程序的目录相同,我也将其导入到项目本身。下面是代码,后面是输出,欢迎任何建议,谢谢

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"allshows" 
                                    ofType:@"txt"];
NSLog(@"filePath: %@", filePath);

NSString *fileString = [NSString stringWithContentsOfFile:filePath];
NSLog(@"fileString: %@", fileString);

NSArray *lines = [fileString componentsSeparatedByString:@"\n"];  
NSLog(@"arrayLines: %@", lines);
输出如下所示:

filePath: (null)
fileString: (null)
arrayLines: (null)
正如我提到的,文件“allshows.txt”与“Epguides.m”(主目录)位于同一目录中

知道我错过了什么吗?这是我第一次真正尝试目标C中的程序,如果这不明显的话,哈哈

谢谢


已解决-感谢您的努力。

尝试此替代方法获取路径和内容,这是我目前在项目中使用的方法:

NSString *path = [[NSBundle mainBundle] bundlePath]; 
NSString *xmlPath = [path stringByAppendingPathComponent:@"periodic.xml"]; 
NSString *xmlString = [NSString stringWithContentsOfFile:xmlPath encoding:NSUTF8StringEncoding error:nil]; 

它正在加载一个xml,但无论如何它只是纯文本,应该对您有用

确保您已将该文件包含在目标中。仅仅把它放在节目里是不够的。具体地说,在该目标的构建步骤中,确保将其复制到输出目录,该目录可能不是您认为要执行的位置。(人们常见的错误是查看项目所在的位置或“release”bin文件夹中的项目,而不是调试,反之亦然。(…如果确实将其添加到步骤中,请确保您知道每次编译和生成时它都会被覆盖。)从
pathForResource
调用返回
null
的原因是捆绑包中没有与该名称匹配的文件

仅仅因为它位于源文件旁边的文件系统中,并不意味着它将被复制到.app包中

检查目标的构建设置中的“复制捆绑资源”步骤,并确保其中列出了该文件

正如我提到的,文件“allshows.txt”与 “Epguides.m”(主目录)

当你说“主目录”时,你是指你的应用程序包还是它正在编译的目录

m让我相信了后者,在这种情况下,您错误地使用了NSBundle。NSBundle将定位位于应用程序包中的文件,而不是编译目录中的文件

要向应用程序包添加内容,请执行以下步骤。 1.将该项拖动到组目录“Supporting Files”内的Xcode项目(本例中为allshows.txt)中(您不需要将其添加到那里,但也可以将其添加到那里)。 2.在左侧选择您的项目并转到“构建阶段”选项卡。 3.如果您的文件不在“复制捆绑资源”中,只需通过拖放添加即可

这样做之后,你应该能够完成你想做的事情

如果我关于编译目录和应用程序包的假设是错误的。
尝试传递@“”对于ofType:,该类型只是NSBundle更快查找的提示。

该文件是否包含在项目中?否则它将不会在编译过程中与应用程序绑定,并且在运行时无法访问我想是的,我将该文件添加到实际的项目窗口中,如中所示,我已-project>add to project>选择了该文件,并在n项目中的文件列表以及其他文件。您可以在“项目设置”中检查它,以确保它包含在生成的“复制资源”阶段。这是在您的目标阶段,然后是生成阶段,然后是复制捆绑资源。我做了您建议的更改,但仍然运气不佳=/输出如下所示:path:/Users/didiier/Documents/Programming/EpGuides/theList/EpGuides/build/Debug xmlPath:/Users/Didier/Documents/Programming/EpGuides/theList/EpGuides/build/Debug/allshows.txt xmlString:(null)我甚至将一份副本放在调试文件夹中以查看是否有帮助,似乎没有任何更改:(我不认为这是开始,所以我添加了一个新的复制包资源阶段,并向其中添加了文件,但同样的问题正在发生,这是我的文件树,如果这有帮助的话:什么是
[[NSBundle mainBundle]bundlePath]
给你看?这个目录里面有什么?谢谢你,老兄!成功地让它工作了!只需要弄清楚如何从数组中打印一个元素(例如,在java中,行[0],行[1]等等,请注意我的想法,因为在objective C中不是这样的?)感谢您的帮助,伙计!要在obj-c中通过索引访问数组元素,请使用“objectAtIndex:index”方法,这样您的代码将是[lines objectAtIndex:0]、[lines objectAtIndex:1]等等。刚刚解决了这个问题,谢谢大家!这是一个巨大的帮助!再次感谢!:D