1

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」にバインドするのと同じはずです。後者が機能しない理由がわかりません。何か案は?このフォーラムや他のフォーラムで同様の質問を見たことがありますが、まだ説明や解決策を見つけていません。

4

1 に答える 1

0

これがまだあなたにとって話題であるかどうかはわかりませんが、確かに答えが必要です.

2 番目の列の値は、最初とまったく同じ方法で NSArrayController にバインドする必要があります。なぜ違う方法で作ったのか、実際に何を達成したかったのかわかりません。

最初のタスクは、テーブルの列を配列の列にバインドすることでした。これは、すべての列と型に対して同じように機能します。

2 番目のタスクは、NSTextfield などの特定の他のオブジェクトにバインドされた特定の NSTableColumn の合計を取得することです。そして、これは次のように行われます。

    [totalCountField bind: @"value" toObject: arrayController
          withKeyPath:@"arrangedObjects.@sum.price" options:nil];
于 2011-11-08T12:05:26.620 に答える