Странная ошибка в отношении переменных экземпляра и суперкласса - PullRequest
7 голосов
/ 12 мая 2011

У меня есть некоторый код, где мои классы наследуются от суперкласса, и до сих пор все работало нормально. Я получаю сообщение об ошибке всякий раз, когда пытаюсь использовать любую из переменных суперкласса, говоря, что они необъявлены (сначала используйте эту функцию). Это происходит только в одном из моих подклассов, и выглядит точно так же, как и в других. Мне интересно, есть ли что-то очевидное, о чем я должен знать (будучи совершенно новым для Objective-C). Основной код похож на -

@interface mySuperClass : UIViewController {

BOOL myVar;

}

Тогда -

@interface mySubClass : mySuperClass {

}

@implementation mySubClass {

-(void)someMethod {

    myVar = YES; // error here

}

@end

Любая помощь очень ценится - если вам нужна дополнительная информация, дайте мне знать! Спасибо.

Ответы [ 4 ]

4 голосов
/ 10 июня 2011

Я только что столкнулся с очень похожей странной ошибкой, когда я больше не мог получить доступ к свойствам в моем суперклассе, и xcode дал мне ошибки компилятора, говоря: «(*) undeclared (первое использование в этой функции)». Однако в прошлом у меня не было проблем ...

Проблема заключалась в том, что я ввел опечатки в верхней части моего файла .m, и вывод компилятора xcode вводил меня в заблуждение. В частности, у меня были операторы @synthesize, где свойства были написаны с ошибками, либо в операторе синтеза, либо в соответствующей переменной в заголовочном файле.

Если у вас есть операторы @synthesize или другие объявления, изучите их с помощью мелкой зубчатой ​​гребенки (т.е. какие строки вы ввели совсем недавно?) Или даже закомментируйте блок из них, чтобы увидеть, сможете ли вы снова скомпилировать и сузить виновник.

Опять же ошибки компилятора очень вводили в заблуждение, поэтому отладку было действительно сложно. Хотя в 99,9% случаев ошибка была моей. :)

2 голосов
/ 12 мая 2011

Я не вижу ничего плохого в вставленном вами коде. Мое первое предположение было бы, что вы не импортируете файл mySuperClass .h должным образом. Т.е. ты пропал

#import "mySuperClass.h"    //or #include

В mySubClass.h или mySubClass.m

1 голос
/ 04 августа 2011

У меня та же проблема в течение нескольких недель

Ошибка «Переменная необъявленная» при компиляции на устройство iOS, но не для симулятора

Одно решение, которое я нашел, состоит в том, чтобы просто изменить компилятор со LLVM GCC 4.2 по умолчанию LLVM Compiler 2.0 (или на Apple LLVM Compiler 2.1). Кажется, это ошибка в компиляторе, но это только предположение.

Изменение его - быстрое решение вашей проблемы, если вам вообще не нужно использовать компилятор GCC.

1 голос
/ 21 июня 2011

Я столкнулся с той же проблемой, и, потратив часы, я наконец решил ее в своем проекте:

Я произвел рефакторинг своего источника и удалил участника, но забыл удалить определение @property в файле .h. Это приводит к ошибкам в каждом месте, когда я использую супер членов. Кстати, методы из супер в порядке.

Так что проверь свою собственность. Спасибо Screwtape в post 8 за его решение: -)

РЕДАКТИРОВАТЬ: К сожалению, ответ Крис очень похож, за исключением опечаток против удаления.

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