2

这可能是一个超级简单的错误,但我的眼睛几乎因为试图追捕它而流血。起初,我认为 ARC 可能在起作用,但现在它完全被禁用了,我仍然遇到这个错误。

我有一个定义静态方法的 UMLanguageProtocol 协议

+(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

以及协议本身,在 UMLanguageProtocol.h 中定义

#import <Foundation/Foundation.h>

#define VISIBILITY_SPECIFIER_COUNT 6

@class UMLMethod;
@class UMLAttribute;
@class UMLParameter;

typedef enum {
    PUBLIC, 
    PRIVATE, 
    PROTECTED, 
    PACKAGE,
    DERIVED,
    STATIC
} visibility;

@protocol UMLLanguageProtocol

/* 
 * Language Specifiers
 */
+(NSArray *)nativeDataTypes;

// Return a 6 item array with YES if the language supports that visibility
// specifier at the given index, and no if it doesn't.
+(NSArray*)visibilitySpecifiersForVariables;
+(NSArray*)visibilitySpecifiersForMethods;

/*
 * Parsing Methods
 */
// Returns a regex string that defines a validly formatted method
+(NSString *)methodFormat;
+(NSArray *)methodFormatComponents;

@optional
+(NSString*)documentationCommentFromText:(NSString*)comment;
+(NSString*)scaffoldTextFromMethod:(UMLMethod*)method;
+(NSString*)scaffoldTextFromParameter:(UMLParameter *)parameter;
+(NSString*)scaffoldTextFromAttribute:(UMLAttribute*)attribute;

+(NSArray *)additionalCommonDataTypes;
+(NSString *)defaultRootObject;

@end

说真的,我在写这篇文章时正在掉头发……请帮忙!


更新:实际上,问题导航器中的错误似乎分为两部分。第一部分是“自动引用计数问题”,第二行是“选择器没有已知的类方法”。这很奇怪,这可能与ARC有什么关系?!

4

2 回答 2

0

我认为你需要改变

[language methodFormatComponents];

[[language class] methodFormatComponents];

不过,@Ben S 的观点还是不错的。将所有方法都设置为类级别可能没有意义,并且可能应该更改为实例方法。

于 2012-01-12T01:01:08.400 回答
0

没有吓人的方式>:|

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

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

于 2012-01-12T16:56:13.507 回答