我有一個我正在測試的類,它使用大量的運行時類型標識(反射)來做出關於如何行爲的決定。NSClassFromString返回一個Class對象,它不會正確響應isSubClassOfClass
具體來說,我得到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
所以對我使用的字符串比較,繼續與我工作的時間感,但它是一個可怕的hackety-黑客,我不能這樣離開它。
不確定它是否相關,但是這是從測試目標發生的,所以有問題的類將被添加到兩個目標中。
關於這裏發生了什麼的任何想法?
您可以爲每個類添加主@interface的第一行,以便我可以在代碼中看到類層次結構? –
假設MyInherited對象從繼承自NSObject的MyBaseObject繼承而來 –