«предупреждение:« <CLASS>»может не отвечать на« <[- | +] ФУНКЦИЮ> »« Предупреждения компилятора объективного C / Xcode - PullRequest
1 голос
/ 09 марта 2010

Я понял это, но подумал, что он достоин собственной пары вопросов-ответов.

Я новичок в Xcode и Objective C и знакомлюсь с его различными эксцентриситетами. Например, предупреждение компилятора «warning:» может не отвечать на «<[- | +] FUNCTION>» »появляется, когда я пытаюсь скомпилировать следующий код, который все появляется в моем файле реализации, так как я хочу создать приватный Статическая функция полезности для этого класса:

// Here's the function declaration in the implementation file (I don't want it in the header)
+(void)authenticationRedirectTo:(NSURL *)url WithRelayState:(NSString *)relayState AndSAMLResponse:(NSString *)samlResponse {
...
}

...

// Later on, here's a call to that same function:
[CnaCalendarController authenticationredirectTo:formActionURL WithRelayState:relayState AndSAMLResponse:SAMLResponse];
...

При компиляции выдает предупреждение выше. Далее я выложу свое решение. Не стесняйтесь поделиться своими идеями!

Ответы [ 4 ]

3 голосов
/ 09 марта 2010

Если то, что вам действительно нужно, это приватный метод, то есть вы не хотите, чтобы метод был в заголовочном файле, тогда я хотел бы использовать категорию для этого. Я просто определяю категорию над моей реализацией.

// Enforce private methods by putting them in a category.
@interface YourClass (PrivateMethods)

+(void)authenticationRedirectTo:(NSURL *)url WithRelayState:(NSString *)relayState AndSAMLResponse:(NSString *)samlResponse;

@end

@implementation YourClass

+(void)authenticationRedirectTo:(NSURL *)url WithRelayState:(NSString *)relayState AndSAMLResponse:(NSString *)samlResponse {
...
}
@end

Теперь не имеет значения, каков порядок ваших методов в вашей реализации, что хорошо, так что вы можете правильно "#pragma mark"

1 голос
/ 04 мая 2011

Проблема с вашим вызовом метода:

[CnaCalendarController authenticationredirectTo:formActionURL WithRelayState:relayState AndSAMLResponse:SAMLResponse];

Обратите внимание, что первый «r» в «authenticationredirectTo: ...» в нижнем регистре, но вы объявили его как «authenticationRedirectTo: ...» с большой буквы «R». Учитывая это, неудивительно, что компилятор жалуется, что не может найти объявление для метода, который вы вызываете. Скорее всего, в этой строке произойдет сбой кода, поскольку метод с нижним регистром 'r' не определен.

0 голосов
/ 03 мая 2011

В чем проблема, я думаю, вы объявляете функцию после вызова этой функции. И во время компиляции просто не смог его найти.

0 голосов
/ 09 марта 2010

ОК, вот мое решение, как и было обещано:

Проблема 1: Xcode генерирует ошибочные предупреждения, когда объявление или реализация функции появляется после вызова в обработанном исходном коде. В моем случае они находятся в одном файле, поэтому я смог перейти к реализации функции над вызовом.

Также проверьте порядок ваших импортов, чтобы убедиться, что такая функция импортируется перед импортом, который ее вызывает. Я не видел этого, но видел другие сообщения, где это имело место.

Проблема 2: Кажется, Xcode имеет некоторые ограничения на ДЛИНУ имен функций. Сокращение имени моей функции, как показано во фрагменте ниже, решило проблему. Я, очевидно, выберу что-то более значимое.

// Here is the warning function commented out and a *shorter* name in place.
//+(void)authenticationRedirectTo:(NSURL *)url WithRelayState:(NSString *)relayState AndSAMLResponse:(NSString *)samlResponse {
+(void)X:(NSURL *)url Y:(NSString *)relayState Z:(NSString *)samlResponse {

Надеюсь, это поможет вам с вашими проблемами. Не забудьте проголосовать за этот ответ, если он полезен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...