Cannot call a class method with [self theMethod:]
我正试图在目标C中编写一个类方法。当我声明该方法时,该项目构建良好。但是每当尝试调用该方法时,生成失败。这是我的密码。
头文件
1 2 3 4 5 6 7 8 | #import <UIKit/UIKit.h> @interface LoginViewController : UIViewController { //Declare Vars } - (IBAction) login: (id) sender; + (NSString *) md5Hash:(NSString *)str; @end |
源文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | + (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 | [LoginViewController md5Hash:@"Test"]; |
因为它是类(loginviewcontroller)方法,而不是实例(self)方法。
或者你可以这样做:
1 2 3 4 | - (IBAction) login: (id) sender { //Call the static method [[self class] md5Hash:@"Test"]; } |
它应该与直接用类名调用[LoginViewController MD5Hash:@"test"]完全相同。记住,md5hash是一个类方法,而不是实例方法,因此不能在对象(类的实例)中调用它,而是从类本身调用它。
在类上调用静态方法,而不是在实例上调用静态方法。所以应该
1 2 3 4 | - (IBAction) login: (id) sender { //Call the static method [LoginViewController md5Hash:@"Test"]; } |
1 | - (NSString *) md5Hash:(NSString *)str; |
和
1 2 3 4 5 6 7 8 | - (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 } |