Cannot call a class method with [self theMethod:]

36,227

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"];
}
Share:
36,227
Stefan Bossbaly
Author by

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, 2020

Comments

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