NSBundle pathForResource returns nil

守給你的承諾、 提交于 2019-11-27 06:43:16

问题


I've been trying to load a simple text file in a unit test for an iOS app.

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

My problem is that pathForResource returns nil.

The file stopPointsInCircleData.txt is located in the directory of the test code and the file is listed correctly under "Copy Bundle Resources" in the "Build Phases" of the test target.

I've tried to relax the search by setting ofType to nil, but thet didn't work either.

Any help is very much apprechiated.


回答1:


Your problem is that in a unit test target, -mainBundle doesn't refer to the test target bundle but instead to the bundle of the executable in which the test target is injected. In the case of ios test targets, this is your app bundle; in Mac test targets it may either be the app bundle or the OCUnit runner.

You should look for resources in your test target's bundle. Inside a test class, it's done like this:

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



回答2:


There is simple way to achieve that, you can emulate that bundle path:

Just head to

Project -> TestTarget -> Build Settings -> Unit Testing (Test Host) and just insert:

    $(BUILT_PRODUCTS_DIR)/AppName.app

Happy testing.



来源:https://stackoverflow.com/questions/9157480/nsbundle-pathforresource-returns-nil

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!