NSBundle pathForResource返回nil

时间:2012-02-06 08:38:51

标签: objective-c unit-testing nsbundle

我一直在尝试在iOS应用的单元测试中加载一个简单的文本文件。

NSString* resourcePath = [[NSBundle mainBundle] pathForResource: @"stopPointsInCircleData" ofType:@"txt"];
NSString* stopPointData = [NSData dataWithContentsOfFile: resourcePath];

我的问题是pathForResource返回nil。

文件stopPointsInCircleData.txt位于测试代码的目录中,文件在测试目标的“构建阶段”中的“复制包资源”下正确列出。

我试图通过将type设置为nil来放松搜索,但是它也没有用。

任何帮助都非常重要。

2 个答案:

答案 0 :(得分:27)

您的问题是,在单元测试目标中,-mainBundle不引用测试目标包,而是引用注入测试目标的可执行文件包。对于ios测试目标,这是您的应用程序包;在Mac测试目标中,它可以是app bundle或OCUnit runner。

您应该在测试目标的捆绑包中查找资源。在测试类中,它是这样完成的:

NSBundle *myBundle = [NSBundle bundleForClass: [self class]];

答案 1 :(得分:5)

有一种简单的方法可以实现这一点,您可以模拟该捆绑路径:

前往

Project -> TestTarget -> Build Settings -> Unit Testing (Test Host),只需插入:

    $(BUILT_PRODUCTS_DIR)/AppName.app

快乐的测试。