まず、SQLの考え方から抜け出すためにできることを行う必要があります。コアデータはORMではありません。これは、 SQLiteを1つの可能な永続性バックエンドとして使用するオブジェクトグラフ管理フレームワークです。環境変数(デバッグ用)を介して使用するSQLを表示できますが、SQLはプライベート実装の詳細です。コアデータは、SQLがまったくなくても実装できたはずです。
したがって、dbテーブルの観点から考えないようにしてください。Deal
isntancesのコレクションがあります。あなたは彼らの特性が欲しいですか?Key-Valueコーディングを使用して、これらのインスタンスと関連するインスタンスのプロパティを取得しInstrument
ます。NSSet
のインスタンスがあると仮定すると、:Deals
と呼ばれdeals
ます
[deals valueForKey:@"dealProperty"];
各インスタンスからNSSet
の値を提供します。一度に複数のプロパティを取得する場合は、を使用できます。このメソッドを使用して取得できるのは「1レベルの深さ」のキーのみであるため、たとえば「dealProperty1」、「dealProperty2」のみを取得できますが、「dealRelation.relationProperty」または「dealRelation。@count」は取得できません。dealProperty
Deal
-[NSObject(NSKeyValueCoding) dictionaryWithValuesForKeys:]
「ネストされた」プロパティを取得するには、キーパスを使用するだけです。
[deals valueForKeyPath:@"instrument.instrumentProperty"];
は、からへの1対1の関係であると想定して、各インスタンスに関連付けられinstrumentProperty
たインスタンスの値のセットを提供します。関係が1対多の場合、値のセットを取得します。Instrument
Deal
instrument
Deal
Instrument
instrumentProperty
これはいつでもより明示的に行うことができます(明らかに、このコードは何も行わず、セミコロンなどを省略しているため構文的にも正しくありませんが、概要を示しています):
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;
}
}
適切なコレクションの列挙を使用します。