Подтвердить что ты не робот

Невозможно вызвать метод класса с помощью [self theMethod:]

Я пытаюсь написать метод класса в 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"];
}
4b9b3361

Ответ 1

Вы должны называть его следующим образом:

[LoginViewController md5Hash:@"Test"];

Потому что это метод класса (LoginViewController), а не метод экземпляра ( self).

Ответ 2

Или вы могли бы сделать:

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

который должен быть точно таким же, как вызов [LoginViewController md5Hash: @ "Test" ] непосредственно с именем класса. Помните, что md5Hash - это метод CLASS, а не экземпляр, поэтому вы не можете вызывать его в объектах (экземплярах класса), но из самого класса.

Ответ 3

вы вызываете статические методы в классе, а не в экземпляре. Так должно быть

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

Ответ 4

Символ + указывает, что вы объявляете метод класса. Вы должны заменить его на -. Знак минус обозначает метод экземпляра. После этого вы можете вызвать его с помощью объекта 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
}