问题
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"];
}
回答1:
You should call it like this:
[LoginViewController md5Hash:@"Test"];
Because it's a class (LoginViewController) method and not an instance (self) method.
回答2:
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.
回答3:
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"];
}
回答4:
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
}
来源:https://stackoverflow.com/questions/6585560/cannot-call-a-class-method-with-self-themethod