2011-05-11 3 views
0

RS232MsgGetEventDescriptions.h:méthode Objectif classe inconnue 'ID' C

#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!!"); 
} 
} 

Je reçois une erreur comme "Accès à la méthode de classe 'ID' inconnu" Je ne devrais pas modifier la définition ici.Comment passer l'ID.Je vais appeler ID différentes descriptions de la même manière est donc cette déclaration d'identité.

Répondre

0

La raison pour laquelle vous obtenez un accès méthode de classe inconnue « ID » message d'erreur est parce que vous ne l'avez pas déclaré une méthode appelée ID dans votre classe RS232MsgGetEventDescriptions.

Quand vous dites RS232MsgGetEventDescriptions.ID dans votre code, vous appellent la propriété ID d'objet RS232MsgGetEventDescriptions, ce qui équivaut à [RS232MsgGetEventDescriptions ID]. Cependant, RS232MsgGetEventDescriptions n'est pas un objet, mais une classe et vous n'avez pas de méthode de classe appelée + (REMOTE_MESSAGE_ID)ID dans votre spécification de classe (vous ne l'avez pas déclarée sur l'interface ou implémentée sur l'implémentation de la classe).

Je voudrais également souligner que c'est mauvaise pratique d'utiliser la notation par points pour quelque chose d'autre qu'une propriété. Puisque les classes ne peuvent pas avoir de @properties (ce sont des objets), vous devez appeler cette méthode en utilisant la notation de messagerie Objective-C standard [RS232MsgGetEventDescriptions ID].

Xcode vous permettra toujours d'écrire object.methodName d'appeler des méthodes sans paramètres et object.methodName = value pour les méthodes qui prennent 1 paramètre. Parce qu'ils sont interprétés comme suit:

object.methodName; // Becomes [object methodName] 
object.methodName = value; // Becomes [object setMethodName:value] 
Questions connexes