Если у кого-то возникла эта проблема после обновления его инструментов и устройств до iOS10, я обнаружил, что проблема была в том, чтобы объявить их слабыми, неатомными в файле .h. Я никогда не сталкивался с этим, когда делал это раньше, но после удаления (слабого, неатомного) из объявления свойства все снова заработало нормально.

я есть пользовательский 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 типыИзменить целевую конфигурацию компилятора, такую ​​как: архитектура (все), базовый SDK (все выше 4.0) ничего не изменило

Что кажется решить проблему, но не полностью

Создание свойства для_vwHeader и доступ к нему поself._vwHeader или жеsuper._vwHeader кажется, работает, но необходимость создавать свойство только для доступа к переменной не делает меня удобным, особенно потому, что мне пришлось бы делать это для всех переменных в одной и той же ситуации внутри моего проекта.изменена версия компилятора C / C ++: используетсяApple LLVM Compiler 2.1 делает ошибку компиляции исчезающей, но дает кучу других проблем с другими библиотеками, используемыми в проекте. Таким образом, это не окончательное решение, но может быть ключом к пониманию проблемы.

РЕДАКТИРОВАТЬ:

Я пытался создать другую переменную, которая не является указателем, аBOOL вместоUIView * а затем использовал его в унаследованном классе: проблема также возникает

РЕДАКТИРОВАТЬ (2):

У меня нет никаких свойств ни в одном из моих классов, и я все еще получаю ошибку. Я просто добавил свойства для тестовых компонентов, чтобы посмотреть, не вызвало ли свойство родительского класса такое же поведение, и, очевидно, это не так. Что еще странно, так это то, что когда я получаю ошибку в переменной, я проверяю ее с помощью intellisense, и он находит ее ...

Ответы на вопрос(0)

Ваш ответ на вопрос