Mac OS X. CoreData アプリ。Country エンティティの管理対象オブジェクト コンテキストにバインドされた NSArrayController によって制御される NSTableView。Country エンティティには、'name' 属性と、Branch エンティティへの対多関係、'branches' があります。Branch エンティティには、'sales' 属性 (NSNumber) があります。
NSTableView には 2 つの NSTableColumns があります。最初は国の名前を示しています。2 つ目は、その国のすべての支店にわたるその国の総売上を表示する必要があります。
最初の列の値は、「名前」のモデル キー パスを持つ NSArrayController の ArrangeObjects にバインドされます。問題ありません。
2 番目の列の値は、「branches.@sum.sales」のモデル キー パスを持つ NSArrayController の ArrangeObjects にバインドされます。これはうまくいきません。「 addObserver:forKeyPath:options:context:] is not supported. Key path: @sum.sales」というエラー メッセージが表示されます。
代わりに、Country クラスに「totalSales」メソッドを追加し、メソッドを次のように実装するとします。
- (NSNumber *)totalSales
{
return [[self branches] valueForKeyPath:@"@sum.sales"];
}
次に、列を「totalSales」にバインドすると、正常に機能します。Collection Operators のドキュメントに関する私の理解では、これは単純に「branches.@sum.sales」にバインドするのと同じはずです。後者が機能しない理由がわかりません。何か案は?このフォーラムや他のフォーラムで同様の質問を見たことがありますが、まだ説明や解決策を見つけていません。