1
我有一个类叫做A
和三个子类的A:SubA0, SubA1, SubA2
。我需要一本字典包含这些对象和我创造这样说:NSDictionary包含几个对象属于一个层次结构
NSDictionary* dic = [[NSDictionary alloc]initWithObjectsAndKeys:
[[SubA0 alloc]init], @"SubA0",
[[SubA1 alloc]init], @"SubA1",
[[SubA2 alloc]init], @"SubA2", nil];
在类A
有一个方法:
-(void)theMethod{
NSLog(@"theMethod - Class A");
}
此方法在所有三个子类覆盖:
类SubA0:
-(void)theMethod{
NSLog(@"theMethod - Class SubA0");
}
类SubA1:
-(void)theMethod{
NSLog(@"theMethod - Class SubA1");
}
类SubA2:
-(void)theMethod{
NSLog(@"theMethod - Class SubA2");
}
在我ViewController
,这行代码:
[[dic objectForKey:classIdentifier]theMethod];
总是调用父类的方法,但很明显,我不希望这样。我希望系统根据类的类型调用正确的方法。
此问题与属于NSDictionary的objectForKey:
方法有关吗?先谢谢你。
@SaurabhPrajapati这不是造成问题的原因,问题清楚地表明,超类实现在调用子类实现时被调用。 –
@SaurabhPrajapati:我不明白你的答案。问题是,当我调用从字典中提取的对象上的方法时,此对象始终被视为A对象。这是错误的,因为我的字典中的所有对象的类型都是SubA0,SubA1,SubA2 ... – superpuccio
忽略问题中的拼写错误(:在方法签名的末尾导致编译器错误)我还没有能够重现这个问题。你能发布你正在使用的实际代码吗?此外,我会建议朝着[现代下标语法](http://nshipster.com/object-subscripting/)而不是繁琐的字典初始化和objectForKey:方法。 –