Cannot call a class method with [self theMethod:]
Solution 1
You should call it like this:
[LoginViewController md5Hash:@"Test"];
Because it's a class (LoginViewController) method and not an instance (self) method.
Solution 2
Or you could do:
- (IBAction) login: (id) sender {
//Call the static method
[[self class] md5Hash:@"Test"];
}
which should be exactly the same as calling [LoginViewController md5Hash:@"Test"] directly with the class name. Remember that md5Hash is a CLASS method, not an instance one, so you can't call it in objects (instances of the class), but from the class itself.
Solution 3
you call static methods on the class, and not on the instance. So should be
- (IBAction) login: (id) sender {
//Call the static method
[LoginViewController md5Hash:@"Test"];
}
Stefan Bossbaly
Programmer and engineer. Want to learn as much as possible about computers from high level languages like Python to hardware circuitry like flip flops. Blog Github Twitter
Updated on February 03, 2020Comments
-
Stefan Bossbaly over 4 years
I am trying to write a class method in Objective C. The project builds fine when I declare the method. But the build fails whenever I try to call the method. Here is my code.
Header File
#import <UIKit/UIKit.h> @interface LoginViewController : UIViewController { //Declare Vars } - (IBAction) login: (id) sender; + (NSString *) md5Hash:(NSString *)str; @end
Source File
+ (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"]; }