したがって、InvoiceとInvoiceLineItemの2つのオブジェクトがあります。 InvoiceLineItemにはcost
というプロパティがあり、他のプロパティに基づいて動的に作成されます。私が使用するKVO /バインディングを手助けするために:計算された値に基づいて計算された値にKVOを設定する
+ (NSSet *)keyPathsForValuesAffectingCost {
return [NSSet setWithObjects:@"lineItemType", @"serviceCost", @"hourlyRate", @"timeInSeconds", @"productCost", @"quantityOfProduct", @"mileageCost", @"milesTraveled", nil];
}
これは素晴らしいです。 serivceCostのようなプロパティを編集すると、テーブルビューのメインコストが正常に更新されます。
Invoiceオブジェクトには、InvoiceLineItemsのNSMutableArrayがあります。請求書には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の積み重ね...どうしてちょうどdid not changeChange? – zorn
基本的なオブジェクトが正しく実装されていればうまくいくはずです。たとえば、Core Data FAQには次のようなものがあります。 http://developer.apple.com/documentation/Cocoa/Conceptual/CoreData/Articles/cdFAQ.html#//apple_ref/doc/uid/TP40001802-SW3 –
初期のテストではこれが動作します。私はすでに観測の大部分を(実行をサポートするために)適所に持っていました。再度、感謝します。 – zorn