它的__NSDictionaryM是什么。为什么NSStringFromClass不返回NSMutableDictionary?

时间:2013-04-11 20:42:09

标签: objective-c nsmutabledictionary

我得到了一些我无法得到的奇怪的东西。我正在使用第三方控件(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

2 个答案:

答案 0 :(得分:10)

它是NSMutableDictionary的私有子类。 NSMutableDictionaryRead more about class clusters here.

答案 1 :(得分:0)

我用子类检查完成了它:

if( [[o class] isSubclassOfClass:[NSMutableDictionary class]] ) {
  // o is at least a subclass of NSMutableDictionary
}