我正在尝试创建一个我知道将被子类化的超类(我将使对象变为抽象,但根据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:
的事实有关?在此先感谢您的帮助;我爱你们。
答案 0 :(得分:3)
您的子类不是真正重写-initWithArguments:
,或者您没有正确加载子类。所以:
-initWithArguments:
。-initwithArumgnetns:
,则仍会调用超类-initWithArguments:
。-allocWithZone:
或某事?如果是这样的话,如果是这样的话,我会打赌你的错误就是一百万美元。祝你好运!