4

私はこのサイトのドキュメントや他のいくつかの投稿を調べてきましたが、これを解決する方法を理解できません。これは実際にはSQLでは非常に簡単です。

基本的に私は2つのエンティティインスツルメントとディールを持っています。そして、「取引」は「機器」を使用して目的の操作を実行します。ここで、この取引に使用された取引属性と商品属性を一覧表示します。したがって、SQLでは次のようにします。

SELECT * FROM Instruments INNER JOIN Deals ON Instruments.ID = Deals.InstrumentID

NSPredicateでこれをどのように達成しますか?どんな助けでも大いに感謝されます。ありがとうございました。

-オスカー

4

1 に答える 1

12

まず、SQLの考え方から抜け出すためにできることを行う必要があります。コアデータORMではありません。これは、 SQLiteを1つの可能な永続性バックエンドとして使用するオブジェクトグラフ管理フレームワークです環境変数(デバッグ用)を介して使用するSQLを表示できますが、SQLはプライベート実装の詳細です。コアデータは、SQLがまったくなくても実装できたはずです。

したがって、dbテーブルの観点から考えないようにしてください。Dealisntancesのコレクションがあります。あなたは彼らの特性が欲しいですか?Key-Valueコーディングを使用して、これらのインスタンスと関連するインスタンスのプロパティを取得しInstrumentます。NSSetのインスタンスがあると仮定すると、:Dealsと呼ばれdealsます

[deals valueForKey:@"dealProperty"];

各インスタンスからNSSetの値を提供します。一度に複数のプロパティを取得する場合は、を使用できます。このメソッドを使用して取得できるのは「1レベルの深さ」のキーのみであるため、たとえば「dealProperty1」、「dealProperty2」のみを取得できますが、「dealRelation.relationProperty」または「dealRelation。@count」は取得できません。dealPropertyDeal-[NSObject(NSKeyValueCoding) dictionaryWithValuesForKeys:]

「ネストされた」プロパティを取得するには、キーパスを使用するだけです。

[deals valueForKeyPath:@"instrument.instrumentProperty"];

は、からへの1対1の関係であると想定して、各インスタンスに関連付けられinstrumentPropertyたインスタンスの値のセットを提供します。関係が1対多の場合、値のセットを取得します。InstrumentDealinstrumentDealInstrumentinstrumentProperty

これはいつでもより明示的に行うことができます(明らかに、このコードは何も行わず、セミコロンなどを省略しているため構文的にも正しくありませんが、概要を示しています):

for(Deal *deal in deals) {
  //use attribute access to get properties of deal and associated instrument
  deal.dealProperty
  deal.instrument.instrumentProperty //for one-to-one

  for(Instrument *instrument in deal.instruments) { //for one-to-many instruments
    instrument.instrumentProperty;
  }
}

適切なコレクションの列挙を使用します。

于 2009-11-30T20:50:04.670 に答える