Итак, у меня есть два объекта: Invoice и InvoiceLineItem. InvoiceLineItem имеет свойство, называемое cost
, и оно динамически создается на основе других свойств. Чтобы помочь с KVO/креплениями, я использую:Настройка KVO для вычисленных значений на основе вычисленных значений
+ (NSSet *)keyPathsForValuesAffectingCost {
return [NSSet setWithObjects:@"lineItemType", @"serviceCost", @"hourlyRate", @"timeInSeconds", @"productCost", @"quantityOfProduct", @"mileageCost", @"milesTraveled", nil];
}
Это прекрасно работает. Когда я редактирую свойство вроде serivceCost, основная стоимость в представлении «Просмотр таблицы» прекрасна.
В объекте Invoice у меня есть NSMutableArray из InvoiceLineItems. Счет-фактура имеет аналогичное свойство, называемое totalCost
. Он рассчитывается путем итерации по позициям и до тех пор, пока позиция не будет помечена как удаленная (что я делаю для синхронизации причин), она добавляет затраты и создает totalCost.
Теперь мой вопрос/вопрос. Как настроить TotalCost счета-фактуры так, чтобы он работал с KVO/привязками при изменении одной из затрат на позицию?
Я попытался создать:
+ (NSSet *)keyPathsForValuesAffectingTotalCost {
return [NSSet setWithObjects:@"lineItems.cost", nil];
}
, но он не работает. В итоге у меня возникла ошибка в консоли: [<NSCFArray 0x1499ff40> addObserver:forKeyPath:options:context:] is not supported. Key path: cost
Я был очень близок к этому виду реализации себя, но это хорошо, чтобы услышать его прийти от кого-то другого. Вопрос, хотя, укладка will/didChange ... почему бы просто не позвонить didChange? – zorn
Я думаю, что он должен работать, если базовые объекты реализуют его правильно. Например, в разделе «Часто задаваемые вопросы по основным данным» отображается примерно так: http://developer.apple.com/documentation/Cocoa/Conceptual/CoreData/Articles/cdFAQ.html#//apple_ref/doc/uid/TP40001802-SW3 –
С некоторыми ранними испытаниями это работает. У меня уже было больше всего материала для наблюдения (для поддержки отмены). Еще раз спасибо. – zorn