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"];
}
次のように呼び出す必要があります。
[LoginViewController md5Hash:@"Test"];
クラス(LoginViewController)メソッドであり、インスタンス(self)メソッドではないためです。
またはあなたがすることができます:
- (IBAction) login: (id) sender {
//Call the static method
[[self class] md5Hash:@"Test"];
}
これは、クラス名で直接[LoginViewController md5Hash:@ "Test"]を呼び出すのとまったく同じです。 md5HashはインスタンスメソッドではなくCLASSメソッドであるため、オブジェクト(クラスのインスタンス)では呼び出せず、クラス自体から呼び出すことを忘れないでください。
インスタンスではなくクラスで静的メソッドを呼び出します。だから
- (IBAction) login: (id) sender {
//Call the static method
[LoginViewController md5Hash:@"Test"];
}
+
記号は、クラスメソッドを宣言していることを示します。 -
に置き換える必要があります。マイナス記号はインスタンスメソッドを示します。その後、self
objectで呼び出すことができます。
- (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
}