Почему я получаю неперехваченное исключение при реализации моих собственных методов установки / получения KVC

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

6
задан Andrew Madsen 13 February 2012 в 21:00
поделиться