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)
Ответы
Ответ 1
Как уже упоминалось в моем вопросе, я понял, что неправильно использовал исходные файлы приложения в фазе сборки источников компиляции тестового пакета. После удаления исходных файлов с этой фазы сборки я решил ошибку компоновщика отсутствующих символов, изменив настройку по умолчанию "Скрытые по умолчанию символы" на "Нет" для конфигурации отладки
![Xcode build settings]()
Это решило ошибку компоновщика и означало, что я больше не использовал дубликаты исходных файлов
Примечание. Также не забудьте установить "Целевое назначение узла" для целевой цели на вкладке Info
Xcode, чтобы она вытащила из нее источники компиляции
Ответ 2
Возможно, это полезно, первый ответ: isKindOfClass и NSStringFromClass не согласны с UIApplicationDelegate.