Мои классы модели в основном реализованы с помощью синтезированных методов установки / получения, и все было в порядке. Все было красиво подключено к пользовательскому интерфейсу. Позже я понял, что изменение одного свойства должно привести к изменению других свойств (изменение типа
может вызвать изменения в minA
и maxA
), поэтому я вручную написал методы установки / получения для свойства типа
. Код следующий:
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 ? Почему я получаю эту ошибку?