Похоже, ваша проблема связана с тем, что в keyPathsForValuesAffectingTotal
упоминается только keyPath "itemLink".
Поскольку это путь отношения ко многим, вы фактически указываете свой объект ставки.соблюдать множество изменений.Все, что делает набор, это управляет, являются ли объекты его членами или нет.Это объясняет, почему вы получаете обновления, когда элементы добавляются или удаляются из «itemLink», но только это.
Вас интересует не только то, какие элементы являются членами набора, но и вас интересует(изменяемые) свойства этих членов - цена в этом случае.Таким образом, в дополнение к вышесказанному, вы хотите, чтобы каждый элемент itemLink уведомлял всех наблюдателей об общем ключе соответствующего объекта ставки, что «цена» изменялась при каждом изменении.
К сожалению, это не так простокак добавление «itemLink.price» в качестве зависимого пути к ключу в вашем классе Bid, поскольку KVO не позволяет вам наблюдать отношения «сквозь» ко многим.
Если вы используете подкласс NSManagedObject для экземпляров вашего Itemсущность, вы можете добавить эту функцию вручную.Переопределите + automaticallyNotifiesObserversForKey:
в своем классе Item, чтобы сообщить Какао, что вы собираетесь управлять уведомлениями KVO вручную для ключа "price", а затем внедрите свой собственный метод setPrice:
, который отправляет соответствующее уведомление.Примерно так:
- (void)setPrice:(id)inPrice
{
// bid = inverse relationship of itemLink
[[self valueForKey:@"bid"] willChangeValueForKey:@"total"];
[self willChangeValueForKey:@"price"];
[self setPrimitiveValue:inPrice forKey:@"price"];
[self didChangeValueForKey:@"price"];
[[self valueForKey:@"bid"] didChangeValueForKey:@"total"];
}