Мои классы моделей в основном реализованы с помощью синтезированных методов установки / получения, и все было хорошо. Все было приятно подключено к пользовательскому интерфейсу. Позже я понял, что изменение одного свойства должно привести к изменению других свойств (изменение type
может вызвать изменения в minA
и maxA
), поэтому я вручную написал методы setter / getter для свойства type
. Код следует:
QBElementType
@interface QBElementType : NSObject
@property NSRange minRange;
@property NSRange maxRange;
@end
@implementation QBElementType
@synthesize minRange;
@synthesize maxRange;
@end
QBElement
@interface QBElement : QBElementType{
QBElementType *_type;
}
@property (weak) QBElementType *type;
@property NSUInteger minA;
@property NSUInteger maxA;
@end
@implementation QBElement
@synthesize minA = _minA;
@synthesize maxA = _maxA;
- (QBElementType*)type
{
return _type;
}
- (void)setType:(QBElementType*)newType
{
[self willChangeValueForKey:@"type"];
_type = newType; // no need to bother with retain/release due to ARC.
[self didChangeValueForKey:@"type"];
/* Having the following 4 lines commented out or not changes nothing to the error
if (!NSLocationInRange(_minA, newType.minRange))
self.minA = newType.minRange.location;
if (!NSLocationInRange(_maxA, newType.maxRange))
self.maxA = newType.maxRange.location;
*/
}
@end
ВОПРОС : С тех пор всякий раз, когда я меняю Тип элемента, я получаю необработанное исключение :
Невозможно обновить для наблюдателя для ключевого пути
"type.minRange" из , скорее всего потому, что значение для
ключ "тип" был изменен без соответствующего уведомления KVO
послан. Проверьте KVO-соответствие класса QBElement.
Есть ли что-то очевидное, чего мне не хватает в KVO-Compliance ? Почему я получаю эту ошибку?