нераспознанный селектор отправлен в класс. 'методы вызова в ClientViewController.mm'

Я пытаюсь вызвать метод в своем классе ClientViewController.mm и продолжаю получать эту ошибку: Завершение работы приложения из-за необработанного исключения

'NSInvalidArgumentException', reason: '+ [ClientViewController TestMethod]: 
 unrecognized selector sent to class 

У меня есть еще один класс, который реализует интерфейс.

void AppleRecognitionStatusObserver::onRecognitionStatusChanged
                                       (RecognitionStatus newStatus) {
    switch(newStatus) {
        case kInProgress:
            [ClientViewController TestMethod];
            break;
        ....etc
    }
}

Как вызвать методы ClientViewController из другого класса C++?

client view controller.h

//imports UIKit etc
@interface ClientViewController : UIViewController <AVAudioRecorderDelegate>{
    IBOutlet UIButton *recoButton;
    // some other buttons
}
@end

// and the .mm
//#imports....
@interface ClientViewController ()
@end
@implementation ClientViewController
-(void)TestMethod{
    outLabel.text = @"Has been called!";
}

person Matthew Knudsen    schedule 13.03.2013    source источник
comment
Есть ли у ClientViewController метод класса с именем TestMethod?   -  person Carl Norum    schedule 13.03.2013
comment
Что ж, ClientViewController, о котором я говорю, — это ClientViewController.h/mm по умолчанию, который создается для вас при создании нового приложения iOS. clientViewController наследуется от UIViewController. В моем файле clientViewController.m есть метод TestMethod. Я отредактирую, чтобы показать   -  person Matthew Knudsen    schedule 13.03.2013
comment
Но является ли это методом класса?   -  person Carl Norum    schedule 13.03.2013
comment
Re: ваше редактирование - это ваша проблема. Вы пытаетесь вызвать метод экземпляра как метод класса. Вы не можете этого сделать. Вызовите TestMethod для экземпляра ClientViewController, а не для самого класса.   -  person Carl Norum    schedule 13.03.2013
comment
вы также должны начинать имена методов с символа нижнего регистра   -  person Sebastian    schedule 13.03.2013


Ответы (1)


Вы должны убедиться, что ваш ClientViewController.m имеет реализацию метода для testMethod Вот так:

+(void)TestMethod {
    // some code here
}

Ваш ClientViewController.h должен иметь соответствующее объявление заголовка, например:

+(void)TestMethod;

Если вам нужен метод экземпляра, вместо метода класса обязательно измените + на - вот так:

-(void)TestMethod {
    // some code here
}

и

-(void)TestMethod;
person radesix    schedule 13.03.2013
comment
переход на метод класса работал отлично. Спасибо! теперь, как мне получить доступ к переменной экземпляра из метода класса? ‹pre›‹code›+(void)TestMethod{ label.text = @some Text;} ‹/pre›‹/code› - person Matthew Knudsen; 13.03.2013
comment
@MatthewKnudsen, вы не можете получить доступ к переменным экземпляра из метода класса. Если бы у вас было несколько экземпляров, как бы вы выбрали, на какой экземпляр воздействовать? - person Carl Norum; 13.03.2013