У меня есть класс, который я тестирую, который использует много типов идентификации (отражения) во время выполнения, чтобы принимать решения о том, как себя вести.
В частности, я получаю Class
заданного типа, используя property_getAttributes
и немного магии строки.
Скажите, что проанализированный класс MyInheritedObject
. Затем мне нужно проверить, наследует ли этот класс общий базовый класс MyBaseObject
.
Итак, учитывая строку: «MyInheritedObject», я использую NSClassFromString для получения экземпляра класса, например:
NSString *className = @"MyInheritedObject";
Class cls = NSClassFromString(className);
BOOL isSubclass = [cls isSubclassOfClass:[MyBaseObject class]];
Это возвращает NO
, что невероятно озадачивает. Если я выйду из суперкласса, похоже, он должен работать:
NSLog(@"Superclass: %@", [cls superclass]);
//logs: Superclass: MyInheritedObject
Так что пока я использую сравнение строк, чтобы продолжить свою работу, но это ужасный хакетский хак, и я не могу с этим расстаться.
Не уверен, если это связано, но это происходит от тестовой цели, поэтому рассматриваемые классы добавляются к обеим целям.
Есть идеи, что здесь происходит?