Я столкнулся с такой же проблемой, как и вы. В моем случае причина была (как ни странно!) В неправильном синтезе свойств в подклассе.
Пример:
В файле .h подкласса у вас есть следующее объявление
BOOL _flag;
...
@property (nonatomic, assign) BOOL flag;
в то время как вы синтезируете свойство неправильно:
@synthesize flag;
вместо
@synthesize flag = _flag;
Странно, компилятор не жалуется на неправильную синтезировку (свойства даже работают отлично!), Но выдает ошибку, когда я пытаюсь получить доступ к защищенным полям, объявленным в базовом классе.
Подробное объяснение
Вот как выглядит мой код
У меня есть базовый класс (отрывок):
@interface BaseEditionModalController : NSObject
{
DataContext *_dataContext;
}
И у меня есть его подкласс (отрывок):
@interface LocationModalController : BaseEditionModalController
{
MCLocation *_readLocation;
LocationCommModel *_oldLocationCommModel;
}
//This is MCLocation for reading only - from the main application context
@property (nonatomic, retain) MCLocation *readLocation;
@property (nonatomic, retain) LocationCommModel *oldLocationCommModel;
@end
И в LocationModalController.m у меня есть следующие неправильные объявления:
@implementation LocationModalController
@synthesize readLocation;
@synthesize oldLocationCommModel;
Попытка доступа к _dataContext в LocationModalController вызвала ошибку, что _dataContext не объявлен.
Изменение синтеза свойств на:
@implementation LocationModalController
@synthesize readLocation = _readLocation;
@synthesize oldLocationCommModel = _oldLocationCommModel;
ВОЛШЕБНО РЕШАЕТ ПРОБЛЕМУ!
Привет