J'essaie d'écrire une méthode de classe dans Objective C. Le projet se construit bien lorsque je déclare la méthode. Mais la construction échoue chaque fois que j'essaie d'appeler la méthode. Voici mon code.
En tête de fichier
#import <UIKit/UIKit.h>
@interface LoginViewController : UIViewController {
//Declare Vars
}
- (IBAction) login: (id) sender;
+ (NSString *) md5Hash:(NSString *)str;
@end
Fichier source
+ (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"];
}
Vous devriez l'appeler comme ça:
[LoginViewController md5Hash:@"Test"];
Parce que c'est une méthode de classe ( LoginViewController ) et non une méthode d'instance ( self ).
Ou tu pourrais faire:
- (IBAction) login: (id) sender {
//Call the static method
[[self class] md5Hash:@"Test"];
}
ce qui devrait être exactement la même chose que d'appeler [LoginViewController md5Hash: @ "Test"] directement avec le nom de la classe. N'oubliez pas que md5Hash est une méthode CLASS, pas une instance, vous ne pouvez donc pas l'appeler dans des objets (instances de la classe), mais à partir de la classe elle-même.
vous appelez des méthodes statiques sur la classe et non sur l'instance. Alors devrait être
- (IBAction) login: (id) sender {
//Call the static method
[LoginViewController md5Hash:@"Test"];
}
Le symbole +
indique que vous déclarez une méthode de classe. Vous devriez le remplacer par -
. Le signe moins indique la méthode de l'instance. Après cela, vous pouvez l'appeler avec self
object.
- (NSString *) md5Hash:(NSString *)str;
et
- (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
}