2011-06-26 8 views
1

NSArrayControllerのコンテンツをフィルタリングしてNSTableViewの列にバインドする際に問題が発生しました。NSArrayControllerとNSTableViewでdistinctUnionOfObjectsを使用

実際、私は顧客の請求書を作成するために使用するフォームを持っています。これを行うにはCustomerという配列があり、そこに各顧客の情報を収集することができます。

ここで私はすべてのお客様にNSTableViewを使用してもらいたいと思いますが、私はそれが重複しないようにする必要があります。 @distinctUnionOfObjectsを使用して顧客のユニークな配列を作成できますが、Interface BuilderのBinding Inspectorメニューでは機能しませんでした。 コントローラキー:arrangedObjectsとモデルキーパス:@distinctUnionOfObjects.customerNameを使用すると、エンティティがKVCに準拠していないことを示すエラーが表示されます。

2011-06-28 00:22:03.212 FinancingPro[459:903] [<NSManagedObject 0x10053e1a0> valueForUndefinedKey:]: the entity Customer is not key value coding-compliant for the key "@distinctUnionOfObjects". 

distinctUnionOfObjectsは正しい方法ではありません。

NSTableViewに固有のパラメータを設定するにはどうすればよいですか?

+0

質問を編集して、コンソールに表示されたメッセージを正確に表示してください。 –

+0

@peter Hosey、質問はFYIを編集しました。 – Prooshani

答えて

2

コントローラキー:arrangedObjectsとモデルキーパス:@ distinctUnionOfObjects.customerNameを使用すると、エンティティがKVCに準拠していないことを示すエラーが表示されます。

2011-06-28 00:22:03.212 FinancingPro[459:903] [<NSManagedObject 0x10053e1a0> valueForUndefinedKey:]: the entity Customer is not key value coding-compliant for the key "@distinctUnionOfObjects". 

あなたのモデルオブジェクトではなく、アレイコントローラにバインドされてきました。 arrangedObjectsはアレイコントローラーのプロパティで、@distinctUnionOfObjectsはアレイとセットでのみサポートされる特殊キーです。したがって、アレイコントローラーにバインドする必要があります。

フィルタ@distinctUnionOfObjectsは、その列にのみ適用され、他の列には適用されません。したがって、顧客自身の名前ではなく、顧客の名前だけをフィルタリングしています。これはおそらく間違っています。モデル内に同じ名前の複数の顧客を持つことができます。そうした場合、テーブルビューは反転します(長さが異なる複数の列を指定しているため)か、効果的にゴミそれらが他の列に対して相対的にシフトされているため、間違った名前になります)。

さらに、ソースリストなどの名前列のみのテーブルビューがあり、このフィルタリングを適用するとします。次に、顧客が重複している場合は、そのうちの1つだけが表示され、ランダムなものになります。ユーザーがその顧客を削除すると、他のユーザー(または他のユーザー)が表示されます。これは削除が失敗したように表示されます(「私はJohn Smithを削除しましたが、John Smithはまだリストに表示されています!」)。

同じ名前の複数の顧客を許可しない場合は、Key-Value Validationを使用して顧客を入力または変更したときに行い、テーブルビューでこの出力制限を解除します。どういうわけか、あなたのユーザがデータベース内で同じ名前の複数のユーザを取得した場合、あなたのアプリケーションが狂ってしまうことは望ましくありません。

出力ではなく重複を防ぐ必要があります。

+0

正直言って私はあなたに同意し、重複したデータを追加することは、データベースのデータ正規化の前にあります。私はまだ** SQL **の考え方を考えており、**コアデータ**のようなデータモデルを使って問題があるので、これは私に起こると思います。とにかく、各請求書に重複を防止するために**顧客の名前**を受け取れるようにするにはどうすればよいですか? 各請求書の**顧客名**を受け取らなければならないことを考慮してください。この顧客名は**請求書コード**と関連しているため、データ入力時に顧客の名前を取得することはできません。 どうすればいいですか? – Prooshani

関連する問題