I am trying to write a class method in Objective C. The project builds fine when I declare the method. But the build fails whenever I try to call the method. Here is my code.
Header File
#import开发者_开发问答 <UIKit/UIKit.h>
@interface LoginViewController : UIViewController {
//Declare Vars
}
- (IBAction) login: (id) sender;
+ (NSString *) md5Hash:(NSString *)str;
@end
Source File
+ (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"];
}
You should call it like this:
[LoginViewController md5Hash:@"Test"];
Because it's a class (LoginViewController) method and not an instance (self) method.
Or you could do:
- (IBAction) login: (id) sender {
//Call the static method
[[self class] md5Hash:@"Test"];
}
which should be exactly the same as calling [LoginViewController md5Hash:@"Test"] directly with the class name. Remember that md5Hash is a CLASS method, not an instance one, so you can't call it in objects (instances of the class), but from the class itself.
you call static methods on the class, and not on the instance. So should be
- (IBAction) login: (id) sender {
//Call the static method
[LoginViewController md5Hash:@"Test"];
}
The +
symbol indicates that you are declaring a class method. You should replace it with -
. The minus sign denotes the instance method. After that you can call it with self
object.
- (NSString *) md5Hash:(NSString *)str;
and
- (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
}
精彩评论