关于C#:无法使用[self theMethod:]调用类方法

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"];
}

+符号表示正在声明类方法。你应该把它换成-。减号表示实例方法。然后你可以用self对象来调用它。

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
}