Цель-C: Метод экземпляра 'method' используется в 'Class', которого нет в корневом классе - PullRequest
1 голос
/ 08 ноября 2011

Я получаю предупреждение: Метод экземпляра 'method' используется в 'Class', которого нет в корневом классе.

Я вызываю этот метод (который определен в суперклассе) в статическом методе. Когда я выполняю код, я получаю ошибку во время выполнения: нераспознанный селектор отправлен в класс .

Возможно ли решить эту проблему? Можно ли вызвать метод суперкласса внутри статического метода?

Спасибо

EDIT

Детский класс:

@interface ProfileClass : GHAsyncTestCase {}
+ (void)testGHUnitSuccess;
@end

@implementation ProfileClass
+ (void)testGHUnitSuccess {
    [self waitForStatus:kGHUnitWaitStatusSuccess timeout:10.0];
}
@end

GHAsyncTestCase - это класс из среды GHUnit. Возможно, невозможно вызвать метод суперкласса в статическом методе. Если нет, мне придется решить ее по-другому.

РЕШЕНИЕ

Я создал общий экземпляр моего суперкласса и использовал его в статических методах.

1 Ответ

3 голосов
/ 08 ноября 2011

Простой ответ - нет.

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

Таким образом, вам нужно либо преобразовать вызываемый метод в статический метод - что должно быть возможно, если метод не зависит от каких-либо значений экземпляра или вам необходимо создать экземпляр класса (alloc, init и т. Д.) В статический метод.

Мы не можем предоставить более конкретный выход, не увидев ваш код.

EDIT: После редактирования вы можете увидеть, в чем проблема.
В методе класса (+ (void) testGHUnitSuccess - обратите внимание, не статический метод) self - это класс, который не имеет методов экземпляра. Таким образом, как вы говорите, вам нужно заменить себя экземпляром класса - в данном случае общим экземпляром.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...