NSBundle pathForResource возвращает nil

Я пытаюсь загрузить простой текстовый файл в unit test для приложения iOS.

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

Моя проблема в том, что pathForResource возвращает nil.

Файл stopPointsInCircleData.txt находится в каталоге тестового кода, и файл указан правильно в разделе "Копирование ресурсов пакета" в разделе "Фазы сборки" тестовой цели.

Я попытался расслабить поиск, установив Type на nil, но thet тоже не работал.

Любая помощь очень удобна.

Ответ 1

Ваша проблема в том, что в unit test target -mainBundle не ссылается на тестовый целевой пакет, а вместо этого на пакет исполняемого файла, в который вводится тестовая цель. В случае целевых тестов ios это ваш комплект приложений; в тестовых целях Mac это может быть либо приложение, либо бегун OCUnit.

Вы должны искать ресурсы в своем тестовом целевом комплекте. Внутри тестового класса это делается следующим образом:

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

Ответ 2

Существует простой способ достичь этого, вы можете эмулировать этот путь:

Просто направляйся на

Project -> TestTarget -> Build Settings -> Unit Testing (Test Host) и просто вставьте:

    $(BUILT_PRODUCTS_DIR)/AppName.app

Счастливое тестирование.