28

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

4 に答える 4

64

あなたはそれをこのように呼ぶべきです:

[LoginViewController md5Hash:@"Test"];

これはクラス(LoginViewController)メソッドであり、インスタンス(self)メソッドではないためです。

于 2011-07-05T16:01:39.963 に答える
33

または、次のことができます。

- (IBAction) login: (id) sender {
        //Call the static method
        [[self class] md5Hash:@"Test"];
}

これは、クラス名を使用して[LoginViewController md5Hash:@"Test"]を直接呼び出すのとまったく同じである必要があります。md5HashはインスタンスメソッドではなくCLASSメソッドであるため、オブジェクト(クラスのインスタンス)ではなく、クラス自体から呼び出すことができます。

于 2012-07-29T01:18:07.050 に答える
13

インスタンスではなく、クラスで静的メソッドを呼び出します。だから

- (IBAction) login: (id) sender {
        //Call the static method
        [LoginViewController md5Hash:@"Test"];
}
于 2011-07-05T16:02:46.427 に答える
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
}
于 2013-04-10T13:33:24.417 に答える