Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 未正确调用具体子类上的方法_Objective C_Polymorphism - Fatal编程技术网

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

Objective c 未正确调用具体子类上的方法,objective-c,polymorphism,Objective C,Polymorphism,我正在尝试创建一个超类,我知道它将被子类化(我会使对象抽象,但根据,您不能)。超类定义了一个方法,-initWithArguments:,它只是抛出一个错误,因为它被子类重写。超类还有一个静态初始值设定项,用于确定在运行时返回哪个子类,如下所示: Class subClass = NSClassFromString(classNameFromFile); NSArray *argumentArray = [ArgumentsFromFile componentsSeparatedByString

我正在尝试创建一个超类,我知道它将被子类化(我会使对象抽象,但根据,您不能)。超类定义了一个方法,
-initWithArguments:
,它只是抛出一个错误,因为它被子类重写。超类还有一个静态初始值设定项,用于确定在运行时返回哪个子类,如下所示:

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

我希望重写的
-initWithArguments:
方法将在第3行中调用。但是,当我运行这段代码时,只有超类的
-initWithArguments:
被调用。我已经检查并再次检查了重写的方法签名是否正确,并且我已经确认子类正确地表示了子类。我勒个去?这是否与我在超类中调用
-initWithArguments:
有关?提前感谢您的帮助;我爱你们所有人。

要么您的子类没有真正覆盖
-initWithArguments:
,要么您没有正确加载子类。因此:

  • 在子类的
    -initWithArguments:
    中放置断点
  • 确保子类上的方法名称没有输入错误:例如,如果子类中有
    -initWithArumgnets:
    ,则仍将调用超类的
    -initWithArguments:
  • 您是在重写
    -allocWithZone:
    还是什么?如果是这样的话,我敢打赌一百万美元你的臭虫就在那里,如果是这样的话

  • 祝你好运

    我覆盖了allocWithZone:在程序的另一端,在一个不相关的单例中。这样行吗?我已经检查并再次检查了我的方法签名是否正确,并且我已经调试并确保正确加载了我的子类。我已经在两个实现中都设置了断点,而编译器总是选择错误的断点。我修复了它!我觉得自己很愚蠢。我的文件数据有问题。不过还是谢谢你。我希望我给了你一些心理训练,让你在比赛中领先。