2015-06-25 2 views
0

Я пытаюсь вызвать набор методов из одного класса, которые находятся в другом классе.Иногда метод вызова из другого класса работает, а иногда нет

Методы все находятся в моем классе ViewController.m, и я пытаюсь назвать их из моего другого класса под названием MyClass.m.

Иногда это работает, а иногда и нет.

Ошибки я получаю

unrecognized selector sent to class 0x1071c0050

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[ViewController setProgressValue:]: unrecognized selector sent to class 0x1071c0050'

Когда ошибка говорит о том, что что-то пошло не так в [ViewController setProgressValue:], который исключительно вызываемой из ViewController.m, который также проживает там.

поток выглядит следующим образом: ViewController.methodA -> MyClass.methodB -> ViewController.methodB

Это не работает, но следующие работы ViewController.methodA -> MyClass.methodB -> ViewController.methodC

Как получилось, что первый поток не работает, но второй делает?

ответ

1

Ошибка очень описательный. Вы вызываете метод, который не существует.

Вы вызываете setProgressValue: как метод класса, это, вероятно, метод экземпляра. Обратите внимание на «+» в описании ошибки. Вы должны называть его конкретным экземпляром ViewController.

+0

Как это сделать? Не могли бы вы дать мне справочный документ или некоторый ссылочный код о том, как вызвать его в конкретном экземпляре 'ViewController'. – vaid

+0

Если вы не знаете этих различий, я бы действительно начал с базового введения в программирование в Objective-C. Если вы разместите код, мы можем исправить его как минимум. – Eiko

0

Если бы я должен был сделать обоснованное предположение, не видя ваш код, я бы сказал, что в вашем заголовке у вас есть метод, объявленный, который выглядит примерно так:

+ (void)setProgressValue:(float)progress

И что в вашем реализация у вас есть метод, который выглядит следующим образом:

- (void)setProgressValue:(float)progress { // Blah... }

Обратите внимание, что объявления метода отличаются. Один из них объявлен как статический (обратите внимание на +), а другой объявлен как метод экземпляра (обратите внимание на - в реализации). Ваш заголовок объявляет, что он существует, когда на самом деле статический метод не существует в вашей реализации.

+0

вот что у меня есть. – vaid

+0

Если это то, что у вас есть, это проблема. Вы должны изменить свое заявление в своем заголовке от '+ (аннулируются) setProgressValue: (поплавком) progress' к ' - (Недействительными) setProgressValue: (поплавок) progress' Обратите внимание на '-' вместо '+'. – Killectro

Смежные вопросы