Если у кого-то возникла эта проблема после обновления его инструментов и устройств до 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, и он находит ее ...