Потенциально простая ошибка Objective C с протоколом - PullRequest
2 голосов
/ 12 января 2012

Это может быть очень простая ошибка, но мои глаза практически кровоточат от попыток выследить ее. Сначала я думал, что ARC может играть роль, но теперь он полностью отключен, и я все еще получаю ошибку.

У меня есть протокол UMLLanguageProtocol, который определяет статический метод

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

Серьезно, я теряю волосы, когда пишу это ... пожалуйста, помогите!


ОБНОВЛЕНИЕ: На самом деле, похоже, что ошибка состоит из двух частей в навигаторе ошибок. Первая часть - «Проблема с автоматическим подсчетом ссылок», а вторая строка - «Не известен метод класса для селектора». Странно, что это может иметь отношение к ARC?!

Ответы [ 2 ]

0 голосов
/ 12 января 2012

Безумный путь>: |

Я просто скопировал содержимое этого файла протокола, удалил его из моего проекта, заново создал, вставил все обратно и все работает.XCode, вы будете сожалеть об этом дне !!!!

Спасибо всем, кто помог мне с этой погоней за диким гусем.Извините, результат был настолько неудовлетворительным: (

0 голосов
/ 12 января 2012

Я думаю, вам нужно изменить

[language methodFormatComponents];

на

[[language class] methodFormatComponents];

Тем не менее, точка зрения @Ben S хороша.Вероятно, не имеет смысла, чтобы все ваши методы были на уровне класса, и, вероятно, их следует заменить на методы экземпляра.

...