Во-первых, вы должны сделать все возможное, чтобы избавиться от мышления SQL. Базовые данные не являются ORM. Это инфраструктура управления объектными графами, в которой просто использует SQLite в качестве одного из возможных постоянных бэкэндов. Хотя вы можете просмотреть SQL, который он использует, через переменные среды (для отладки), SQL является частной реализацией. Базовые данные могли быть реализованы вообще без SQL.
Итак, постарайтесь не думать в терминах таблиц БД. У вас есть коллекция Deal
isntances. Вы хотите их свойства? Используйте Кодировка значения ключа , чтобы получить свойства этих экземпляров и связанных экземпляров Instrument
. Предполагая, что у вас есть NSSet
экземпляр Deals
, который называется deals
:
[deals valueForKey:@"dealProperty"];
даст вам NSSet
значений dealProperty
от каждого Deal
экземпляра. Если вы хотите получить несколько свойств одновременно, вы можете использовать -[NSObject(NSKeyValueCoding) dictionaryWithValuesForKeys:]
. С помощью этого метода вы можете получить ключи только на один уровень, например, только 'dealProperty1', 'dealProperty2', но не 'dealRelation.relationProperty' или 'dealRelation. @ count'.
Чтобы получить «вложенные» свойства, просто используйте ключевой путь:
[deals valueForKeyPath:@"instrument.instrumentProperty"];
даст вам набор значений instrumentProperty
экземпляра 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;
}
}
с использованием перечисления соответствующих коллекций.