我正在尝试在Objective C中编写一个类方法。当我声明方法时,项目构建正常。但是每当我尝试调用该方法时,构建都会失败。这是我的代码。
标题文件
#import <UIKit/UIKit.h>
@interface LoginViewController : UIViewController {
//Declare Vars
}
- (IBAction) login: (id) sender;
+ (NSString *) md5Hash:(NSString *)str;
@end
源文件
+ (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"];
}
答案 0 :(得分:64)
您应该这样称呼它:
[LoginViewController md5Hash:@"Test"];
因为它是一个类( LoginViewController )方法而不是实例( self )方法。
答案 1 :(得分:34)
或者你可以这样做:
- (IBAction) login: (id) sender {
//Call the static method
[[self class] md5Hash:@"Test"];
}
应该与使用类名直接调用[LoginViewController md5Hash:@“Test”]完全相同。请记住,md5Hash是一个CLASS方法,而不是实例一,所以你不能在对象(类的实例)中调用它,而是从类本身调用它。
答案 2 :(得分:13)
您在类上调用静态方法,而不是在实例上调用静态方法。所以应该是
- (IBAction) login: (id) sender {
//Call the static method
[LoginViewController md5Hash:@"Test"];
}
答案 3 :(得分:0)
+
符号表示您正在声明一个类方法。您应该将其替换为-
。减号表示实例方法。之后,您可以使用self
对象调用它。
- (NSString *) md5Hash:(NSString *)str;
和
- (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
}