Objective c 带有协议的潜在简单目标C bug

Objective c 带有协议的潜在简单目标C bug,objective-c,debugging,protocols,methodnotfound,Objective C,Debugging,Protocols,Methodnotfound,这可能是一个超级简单的虫子,但我的眼睛因为试图找到它而几乎流血了。起初,我以为ARC可能会扮演一个角色,但现在它完全被禁用了,而且我仍然受到bug的困扰 我有一个UMLLangeProtocol协议,它定义了一个静态方法 +(NSArray *)methodFormatComponents; 我试图在函数中调用该方法,但Xcode(“未知类方法选择器”)无法识别该方法 下面是我尝试使用它的代码: #import "UMLLanguageProtocol.h" @implementation

这可能是一个超级简单的虫子,但我的眼睛因为试图找到它而几乎流血了。起初,我以为ARC可能会扮演一个角色,但现在它完全被禁用了,而且我仍然受到bug的困扰

我有一个UMLLangeProtocol协议,它定义了一个静态方法

+(NSArray *)methodFormatComponents;
我试图在函数中调用该方法,但Xcode(“未知类方法选择器”)无法识别该方法

下面是我尝试使用它的代码:

#import "UMLLanguageProtocol.h"

@implementation UMLMethod

@dynamic documentation;
@dynamic name;
@dynamic umlClass;

+(void)validPortionOfMethod:(NSString *)method inLanguage:(Class<UMLLanguageProtocol>)language {
    [language methodFormatComponents];   <-- Error: No known class method selector 
}

@end
#导入“UMLLanguageProtocol.h”
@实施方法
@动态文件;
@动态名称;
@动态UML类;
+语言:(类)语言中的(void)validPortionOfMethod:(NSString*)方法{

[language methodFormatComponents];我认为您需要更改

[language methodFormatComponents];


尽管如此,@Ben的观点还是很好的。你所有的方法都是类级的,可能没有意义,应该改为实例方法。

我认为你需要改变

[language methodFormatComponents];

尽管如此,@Ben的观点还是很好的。你所有的方法都是类级的,可能没有意义,应该改为实例方法。

没有奇怪的方法>:|

我只是复制了那个协议文件的内容,从我的项目中删除了它,重新创建了它,然后把所有的东西都粘贴回去,它就可以工作了。XCode,你会后悔的

我感谢所有帮助我完成这场白费力气的追逐的人。我很抱歉结果如此令人不满意:(

没有奇怪的方法>:|

我只是复制了那个协议文件的内容,从我的项目中删除了它,重新创建了它,然后把所有的东西都粘贴回去,它就可以工作了。XCode,你会后悔的


我感谢所有帮助我完成这场白费力气的追逐的人。很抱歉,结果如此令人不满意:(

您是否检查了传递到
validPortionOfMethod
中的语言参数,并确认该类确实实现了
methodFormatComponents
class方法?此外,尝试更改为
inLanguage:(id)language
而不是
inLanguage:(class)语言
我无法复制这个。我似乎能够完全正确地完成您正在做的事情,没有错误。是否愿意共享您的编译器命令行以查看是否有任何差异?@Jeremy如果他这样做,他还必须更改调用methodFormatComponents方法的方式。FWIW,我可以将UMLLanguageProtocol.h文件添加到项目,然后将validPortionOfMethod方法粘贴到另一个类中(例如AppDelegate)它对我来说编译得很好。你在任何地方调用validPortionOfMethod吗?代码是什么样子的?我还没有实现它。但它将是遵循UMLLanguageProtocol的每个类的类方法。这应该是一个运行时错误,而不是编译时错误。你检查过正在使用的语言参数吗进入
validPortionOfMethod
并确认该类确实实现了
methodFormatComponents
class方法?此外,尝试更改为
inLanguage:(id)language
,而不是
inLanguage:(class)语言
我无法复制这个。我似乎能够完全正确地完成您正在做的事情,没有错误。是否愿意共享您的编译器命令行以查看是否有任何差异?@Jeremy如果他这样做,他还必须更改调用methodFormatComponents方法的方式。FWIW,我可以将UMLLanguageProtocol.h文件添加到项目,然后将validPortionOfMethod方法粘贴到另一个类中(例如AppDelegate)它对我来说编译的很好。你在任何地方调用validPortionOfMethod吗?代码是什么样子的?我还没有实现它。但它将是遵循UMLLanguageProtocol的每个类的类方法。这应该是一个运行时错误,而不是编译时错误。但是参数语言已经是class类型的,不是吗它?
[language methodFormatComponents];
是正确的,因为方法的参数声明为
类,但参数语言已经是class类型,不是吗?
[language methodFormatComponents];
是正确的,因为方法的参数声明为
[[language class] methodFormatComponents];