具体子类的方法未正确调用

时间:2011-02-13 22:27:22

标签: objective-c polymorphism

我正在尝试创建一个我知道将被子类化的超类(我使对象变为抽象,但根据Creating an abstract class in Objective-C,你不能)。超类定义了一个方法-initWithArguments:,它只是抛出一个错误,因为它被子类覆盖了。超类还有一个静态初始化程序,它确定在运行时返回哪个子类,如下所示:

Class subClass = NSClassFromString(classNameFromFile);
NSArray *argumentArray = [ArgumentsFromFile componentsSeparatedByString:@","];
SuperClass *returnObject = [[subClass alloc] initWithArguments:argumentArray];
if([returnObject isKindOfClass:[SuperClass class]]){
    return returnObject;
}

我希望在第3行中调用重写的-initWithArguments:方法。但是,当我运行此代码时,只会调用超类的-initWithArguments:。我已检查并仔细检查重写的方法签名是否正确,并且我已确认subClass正确表示子类。我勒个去?这是否与我在超类中调用-initWithArguments:的事实有关?在此先感谢您的帮助;我爱你们。

1 个答案:

答案 0 :(得分:3)

您的子类不是真正重写-initWithArguments:,或者您没有正确加载子类。所以:

  1. 在子类的-initWithArguments:
  2. 中放置一个断点
  3. 确保子类上的方法名称中没有拼写错误:例如,如果您在子类中有-initwithArumgnetns:,则仍会调用超类-initWithArguments:
  4. 你是否以某种方式压倒-allocWithZone:或某事?如果是这样的话,如果是这样的话,我会打赌你的错误就是一百万美元。
  5. 祝你好运!