Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cannot call a class method with [self theMethod:]

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"]; } 
like image 405
Stefan Bossbaly Avatar asked Jul 05 '11 16:07

Stefan Bossbaly


People also ask

Do class methods need self?

Class methods don't need a class instance. They can't access the instance ( self ) but they have access to the class itself via cls . Static methods don't have access to cls or self . They work like regular functions but belong to the class's namespace.

Can a class method be called from the class itself?

To call a class method, put the class as the first argument. Class methods can be can be called from instances and from the class itself. All of these use the same method. The method can use the classes variables and methods.

Can class methods call other class methods?

Class method can not call other class methods within the same class.

What is static method Python?

What is a static method? Static methods in Python are extremely similar to python class level methods, the difference being that a static method is bound to a class rather than the objects for that class. This means that a static method can be called without an object for that class.


2 Answers

You should call it like this:

[LoginViewController md5Hash:@"Test"]; 

Because it's a class (LoginViewController) method and not an instance (self) method.

like image 148
MByD Avatar answered Oct 04 '22 03:10

MByD


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.

like image 24
Alejandro Iván Avatar answered Oct 04 '22 05:10

Alejandro Iván