2 Stimmen

Potenziell einfacher Objective C Fehler mit einem Protokoll

Dies könnte ein sehr einfacher Bug sein, aber meine Augen bluten praktisch davon, ihn zu jagen. Zuerst dachte ich, ARC könnte eine Rolle spielen, aber jetzt ist es komplett deaktiviert und ich bekomme immer noch den Bug.

Ich habe ein UMLLanguageProtocol-Protokoll, das eine statische Methode definiert

+(NSArray *)methodFormatComponents;

Ich versuche, diese Methode innerhalb einer Funktion aufzurufen, aber sie wird von Xcode nicht erkannt ("kein bekannter Klassenmethodenselektor").

Hier ist der Code, in dem ich versuche, es zu verwenden:

#import "UMLLanguageProtocol.h"

@implementation UMLMethod

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

+(void)validPortionOfMethod:(NSString *)method inLanguage:(Class)language {
    [language methodFormatComponents];   <-- Fehler: Kein bekannter Klassenmethodenselektor 
}

@end

und das Protokoll selbst, definiert in UMLLanguageProtocol.h

#import 

#define VISIBILITY_SPECIFIER_COUNT 6

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

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

@protocol UMLLanguageProtocol

/* 
 * Sprachspezifische Daten
 */
+(NSArray *)nativeDataTypes;

// Gibt ein 6-stelliges Array zurück, das angibt, ob die Sprache diese Sichtbarkeit unterstützt
// spezifizierer an der gegebenen Indexposition, und nein, wenn dies nicht der Fall ist.
+(NSArray*)visibilitySpecifiersForVariables;
+(NSArray*)visibilitySpecifiersForMethods;

/*
 * Parsing-Methoden
 */
// Gibt einen Regex-String zurück, der eine gültig formatierte Methode definiert
+(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

Im Ernst, ich verliere Haare, während ich das schreibe... bitte hilf!


UPDATE: Eigentlich scheint der Fehler in zwei Teilen im Problemlösungs-Navigator zu liegen. Der erste Teil lautet "Automatic Reference Counting Issue" und die zweite Zeile lautet "No known class method for selector". Das ist seltsam, was könnte das mit ARC zu tun haben?!

0voto

Sean Punkte 5812

Ich denke du musst ändern

[Sprache methodFormatComponents]; 

zu

[[Sprache class] methodFormatComponents]; 

Dennoch ist der Hinweis von @Ben S gut. Es ergibt wahrscheinlich keinen Sinn, dass alle deine Methoden auf Klassenebene sind und sollte wahrscheinlich in Instanzmethoden geändert werden.

0voto

Plastech Punkte 737

Auf keinen Fall >:|

Ich habe einfach den Inhalt dieser Protokolldatei kopiert, aus meinem Projekt gelöscht, neu erstellt, alles wieder eingefügt und es funktioniert. XCode, du wirst den Tag bereuen!!!!

Danke an alle, die mir bei dieser wilden Gänsejagd geholfen haben. Es tut mir leid, dass das Ergebnis so unbefriedigend war :(

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X