objective-c methods class-method

objective c - No se puede llamar a un método de clase con



objective-c methods (4)

Deberías llamarlo así:

[LoginViewController md5Hash:@"Test"];

Porque es un método de clase ( LoginViewController ) y no un método de instancia ( uno mismo ).

Intento escribir un método de clase en Objective C. El proyecto se desarrolla correctamente cuando declaro el método. Pero la compilación falla siempre que intento llamar al método. Aquí está mi código.

Archivo de cabecera

#import <UIKit/UIKit.h> @interface LoginViewController : UIViewController { //Declare Vars } - (IBAction) login: (id) sender; + (NSString *) md5Hash:(NSString *)str; @end

Archivo fuente

+ (NSString *) md5Hash:(NSString *)str { const char *cStr = [str UTF8String]; unsigned char result[16]; CC_MD5( cStr, strlen(cStr), result ); return [NSString stringWithFormat: @"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", result[0], result[1], result[2], result[3], result[4], result[5], result[6], result[7], result[8], result[9], result[10], result[11], result[12], result[13], result[14], result[15] ]; } - (IBAction) login: (id) sender { //Call the class method [self md5Hash:@"Test"]; }


El símbolo + indica que está declarando un método de clase. Deberías reemplazarlo por - . El signo menos denota el método de instancia. Después de eso puedes llamarlo con self objeto self .

- (NSString *) md5Hash:(NSString *)str;

y

- (NSString *) md5Hash:(NSString *)str { const char *cStr = [str UTF8String]; unsigned char result[16]; CC_MD5( cStr, strlen(cStr), result ); return [NSString stringWithFormat: @"%02X%02X%02X%02X%02X%02X;...... source code continued }


O podrías hacer:

- (IBAction) login: (id) sender { //Call the static method [[self class] md5Hash:@"Test"]; }

que debería ser exactamente lo mismo que llamar [LoginViewController md5Hash: @ "Test"] directamente con el nombre de la clase. Recuerde que md5Hash es un método CLASE, no uno de instancia, por lo que no puede llamarlo en objetos (instancias de la clase), sino desde la clase misma.


llama a métodos estáticos en la clase, y no en la instancia. Entonces debería ser

- (IBAction) login: (id) sender { //Call the static method [LoginViewController md5Hash:@"Test"]; }