我得到了一些我无法得到的奇怪的东西。我正在使用第三方控件(https://github.com/brunow/TableKit.m)并执行:
+ (NSSet *)cellMappingsForObject:(id)object mappings:(NSDictionary *)mappings {
NSString *objectStringName = NSStringFromClass([object class]);
return [mappings objectForKey:objectStringName];
}
它创建了一个基于类名称的映射:
[TKCellMapping mappingForObjectClass:[NSMutableDictionary class] block:^(TKCellMapping *cellMapping) {
//CODE
}];
它根据映射检查数据源对象。对象是为我构建的:
while ([rs next]) {
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
for (NSString *fieldName in [props allKeys]) {
//CODE
[dict setValue:fieldValue forKey:fieldName];
}
[list addObject :dict]; //<--This is the datasource. The map is against each dict
}
所以,我告诉它的所有地方都是NSMutableDictionary
。但后来发生这种奇怪的事情。
当它呼叫NSStringFromClass([NSMutableDictionary class])
时,它会说NSMutableDictionary
但是当它呼叫NSStringFromClass([rowDict class])
时它会说__NSDictionaryM
!
为什么会发生这种情况?我检查__NSDictionaryM
的标题,Xcode导航到NSMutableDictionary
(?)。我无法从__NSDictionaryM
创建对象。
顺便说一句,我需要做些什么来替换NSStringFromClass
来准确NSMutableDictionary
?
答案 0 :(得分:10)
它是NSMutableDictionary
的私有子类。 是NSMutableDictionary
。 Read more about class clusters here.
答案 1 :(得分:0)
我用子类检查完成了它:
if( [[o class] isSubclassOfClass:[NSMutableDictionary class]] ) {
// o is at least a subclass of NSMutableDictionary
}