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:方法。 –