Доступ к неизвестному методу класса 'ID' - Цель C - PullRequest
0 голосов
/ 11 мая 2011

RS232MsgGetEventDescriptions.h:

#define DECLARE_RS232_NEWMSG(ClassID)\
enum                                 \
{                                    \
ID = ClassID                         \
};                                   \

@interface RS232MsgGetEventDescriptions : RS232Msg
{

}
@end

RS232MsgGetEventDescriptions.m

@implementation RS232MsgGetEventDescriptions

 DECLARE_RS232_NEWMSG(RM_GET_EVENT_DESCRIPTIONS);
@end

EventLogs.m

-(void)event
{
service = [CServiceAppDlg alloc];
if ([service:(REMOTE_MESSAGE_ID)RS232MsgGetEventDescriptions.ID withEvent:pEvent]) 
 {
    NSLog(@"Get Event descriptions!!");
 }
}

Я получаю сообщение об ошибке типа «Доступ к методу класса« Неизвестный идентификатор »» Я не должен изменять определение здесь. Как передать идентификатор. Я собираюсь вызывать различные описания идентификатора таким же образом, как и это объявление идентификатора.

1 Ответ

0 голосов
/ 07 августа 2011

Причина, по которой вы получаете Доступ к неизвестному методу класса 'ID' Сообщение об ошибке в том, что вы не объявили метод с именем ID в вашем классе RS232MsgGetEventDescriptions.

Когда выскажем RS232MsgGetEventDescriptions.ID в вашем коде, вы вызываете свойство ID объекта RS232MsgGetEventDescriptions, что эквивалентно [RS232MsgGetEventDescriptions ID].Однако RS232MsgGetEventDescriptions - это не объект, а класс, и у вас нет метода класса с именем + (REMOTE_MESSAGE_ID)ID в спецификации класса (вы не объявили его в интерфейсе или не реализовали в реализации класса).

Я также хотел бы отметить, что плохая практика использовать точечную запись для чего-то другого, кроме свойства.Поскольку классы не могут иметь @properties (это для объектов), вы должны вызывать этот метод, используя стандартную запись сообщений Objective C [RS232MsgGetEventDescriptions ID].

Xcode все еще позволит вам писать object.methodName для вызова методов без параметров и object.methodName = value для методов, которые принимают 1 параметр.Потому что они интерпретируются следующим образом:

object.methodName;  // Becomes [object methodName]
object.methodName = value;    // Becomes [object setMethodName:value]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...