2013-04-11 33 views
1

我收到一些我无法理解的奇怪东西。我使用的是thirdy方控制(https://github.com/brunow/TableKit.m),它做的事:什么是__NSDictionaryM。为什么NSStringFromClass不返回NSMutableDictionary?

+ (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

回答

9

这是NSMutableDictionary的私人小类。它NSMutableDictionaryRead more about class clusters here.

+0

@ user529758请问如果我们比较类名这种方式(即用的NSMutableDictionary的私有子类)的应用程序被拒绝。 ? 例如,[[@“__ NSDictionaryM”isEqualToString:NSStringFromClass([obj class])]'' – 2014-09-21 18:37:34

0

我曾与一个子类检查了这事

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