Подтвердить что ты не робот

IsKindOfClass: возвращает значение false в unit test bundle

Итак, у меня есть экземпляр MyViewController в подробном представлении UISplitViewController. Я запускаю unit test, чтобы увидеть, содержит ли подробный вид правильный тип представления.

Я тестирую тип контроллера в unit test следующим образом:

[controller isKindOfClass:[MyViewController class]];

Однако метод isKindOfClass всегда возвращает NO

Когда я устанавливаю объект в отладчике, я получаю следующее:

(gdb) po controller
<MyViewController: 0xb31c4d0>

Я также попробовал метод isMemberOfClass: он дает те же результаты. Может ли кто-нибудь объяснить, почему это произойдет?

РЕДАКТИРОВАТЬ: Итак, прочитав статью, опубликованную Ником Уивером, я понял, что включаю файлы исходного кода приложения в фазе сборки источников компиляции тестового пакета. Это также было указано в журнале с помощью утверждений, подобных следующему:

Class MyViewController is implemented in both /Users/jdoe/Library/Application Support/iPhone Simulator/4.3.2/Applications/670A077A-BAD8-4FA6-945A-851F33114CF5/MyApp.app/MyApp and /Users/jdoe/Library/Developer/Xcode/DerivedData/MyApp-drxyfejeattjwgantzesgensnlnx/Build/Products/Debug-iphonesimulator/MyAppTests.octest/MyAppTests. One of the two will be used. Which one is undefined.

Однако, когда я удаляю исходные файлы из фазы сборки источников компиляции тестового пакета, я бы получил ошибку компоновщика, которая выглядит следующим образом:

Undefined symbols for architecture i386:
"_OBJC_CLASS_$_MyViewController", referenced from:
  objc-class-ref in _MyViewControllerTests.o
 (maybe you meant: _OBJC_CLASS_$__MyViewControllerTests)
4b9b3361

Ответ 1

Как уже упоминалось в моем вопросе, я понял, что неправильно использовал исходные файлы приложения в фазе сборки источников компиляции тестового пакета. После удаления исходных файлов с этой фазы сборки я решил ошибку компоновщика отсутствующих символов, изменив настройку по умолчанию "Скрытые по умолчанию символы" на "Нет" для конфигурации отладки

Xcode build settings

Это решило ошибку компоновщика и означало, что я больше не использовал дубликаты исходных файлов


Примечание. Также не забудьте установить "Целевое назначение узла" для целевой цели на вкладке Info Xcode, чтобы она вытащила из нее источники компиляции