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

UMLLanguageProtocol.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

真剣に、私はこれを書いているときに髪を失っています...助けてください!


更新: 実際には、エラーは問題ナビゲーターの 2 つの部分にあるようです。最初の部分は「自動参照カウントの問題」で、2 行目は「セレクターの既知のクラス メソッドはありません」です。奇妙なことに、これは ARC と何の関係があるのでしょうか?!

4

2 に答える 2

0

おかしなことはありません>:|

そのプロトコル ファイルの内容をコピーし、プロジェクトから削除して再作成し、すべてを貼り付け直したところ、機能しました。XCode、あなたはその日を台無しにするでしょう!!!!

この野生のガチョウの追跡で私を助けてくれたすべての人に感謝します. 残念な結果でした(;_;)

于 2012-01-12T16:56:13.507 に答える
0

私はあなたが変わる必要があると思います

[language methodFormatComponents];

[[language class] methodFormatComponents];

それでも、@Ben Sのポイントは良いです。すべてのメソッドをクラス レベルにするのはおそらく意味がなく、インスタンス メソッドに変更する必要があります。

于 2012-01-12T01:01:08.400 に答える