У меня есть пользовательский UIVIewController, который является базовым классом для других контроллеров и имеет экземпляр пользовательской переменной UIView, к которой обращаются наследуемые классы.
BaseViewController.h
@interface BaseViewController : UIViewController {
UIView *_vwHeader;
}
@end
BaseViewController.m
#import "BaseViewController.h"
@implementation BaseViewController
-(void)loadView {
[super loadView];
_vwHeader = [[UIView alloc] init];
}
@end
CustomViewController.h
#import "BaseViewController.h"
@interface CustomViewController : BaseViewController
@end
CustomViewController.m
#import "CustomViewController.h"
@implementation CustomViewController
- (void)loadView
{
[super loadView];
[_vwHeader setHidden:NO];
}
@end
Проблема в том, что когда я запускаю его на симуляторе, все работает отлично, но когда я перехожу на устройство, у меня есть ошибка в строке [_vwHeader setHidden:NO];
, которая гласит: '_vwHeader' undeclared (first use in this function)
Я уже пытался:
- Комментировать эту строку кода, но затем она дает мне ошибку в другом классе, используя переменную из базового класса одинаково (она возвращает только одну ошибку за раз), поэтому кажется, что это не особая ошибка в представлении или классе контроллера, поскольку ошибка возникает в других кланах с разными типами, таких как
UIView
иNSObject
types - Изменить конфигурацию целевого компилятора, такую как: архитектуры (все они), базовый sdk (все выше 4.0) ничего не изменили
Что, похоже, решает проблему, но не полностью
- Создание свойства для
_vwHeader
и доступ к нему с помощьюself._vwHeader
илиsuper._vwHeader
, похоже, сработает, но необходимость создания свойства только для доступа к переменной не делает меня удобной, особенно потому, что мне нужно будет это сделать для всех переменных в той же ситуации внутри моего проекта. - изменена версия компилятора C/С++: использование
Apple LLVM Compiler 2.1
делает ошибку компиляции упущенной, но дает множество других проблем с другими библиотеками, которые используются в проекте. Таким образом, это не окончательное решение, но может быть ключом к проблеме.
ИЗМЕНИТЬ:
Я попытался создать еще одну переменную, которая не является указателем, BOOL
вместо UIView *
, а затем использовала ее в унаследованном классе: проблема также возникает
ИЗМЕНИТЬ (2):
У меня нет свойств вообще ни в одном из моих классов, и я до сих пор получаю ошибку. Я просто добавил свойства тестовых porpouses, чтобы увидеть, вызвало ли свойство в родительском классе такое же поведение, и, по-видимому, это не так. Что-то странное и в том, что когда я получаю ошибку в переменной, я проверил ее с intellisense и нашел ее...