【问题标题】:NSBundle pathForResource returns nilNSBundle pathForResource 返回 nil
【发布时间】:2012-02-27 18:32:36
【问题描述】:

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

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

我的问题是 pathForResource 返回 nil。

文件 stopPointsInCircleData.txt 位于测试代码的目录中,该文件在测试目标的“Build Phases”中的“Copy Bundle Resources”下正确列出。

我试图通过将 ofType 设置为 nil 来放松搜索,但也没有成功。

非常感谢任何帮助。

【问题讨论】:

  • 手动设置路径会更简单吗? NSHomeDirectory() 会帮助你
  • 可能是因为不是txt ..你检查过文件格式吗....可能是别的什么..rtf?

标签: objective-c unit-testing nsbundle


【解决方案1】:

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

前往

Project -> TestTarget -> Build Settings -> Unit Testing (Test Host) 然后插入:

    $(BUILT_PRODUCTS_DIR)/AppName.app

测试愉快。

【讨论】:

  • 我相信这个答案比公认的要好得多!
  • 框架会是什么?我尝试了$(BUILT_PRODUCTS_DIR)/FrameworkName.framework,但出现错误:“找不到测试主机...”
【解决方案2】:

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

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

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

【讨论】:

  • [self class] 对我不起作用。我不得不替换[NAME_OF_TEST_CLASS class]
  • 如果需要将这样的代码放在测试类之外,可以使用[NSBundle bundleForClass:NSClassFromString(@"MyTestClassName")]
猜你喜欢
  • 2023-03-03
  • 1970-01-01
  • 2015-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-26
相关资源
最近更新 更多