首先,您應該儘自己所能去擺脫SQL的心態。核心數據不是的一個ORM。這是一個對象圖管理框架,剛剛發生使用SQLite作爲一個可能的持久性後端。儘管您可以通過環境變量查看它使用的SQL(用於調試),但SQL是一個私有的實現細節。核心數據本來可以在沒有任何SQL的情況下實現。
所以,儘量不要用數據庫表來思考。你有一個Deal
isntances的集合。你想要他們的財產?使用Key-value Coding可以獲取這些實例的屬性以及相關的Instrument
實例。假設你有一個Deals
例如NSSet
名爲deals
:
[deals valueForKey:@"dealProperty"];
會給你的dealProperty
值的NSSet
從每個Deal
實例。如果你想一次獲得多個屬性,你可以使用-[NSObject(NSKeyValueCoding) dictionaryWithValuesForKeys:]
。您只能使用此方法獲得「一層深」的密鑰,因此只能'dealProperty1','dealProperty2',但不是'dealRelation.relationProperty'或'dealRelation。@ count'。
要獲得「嵌套」的屬性,只需使用一鍵路徑:
[deals valueForKeyPath:@"instrument.instrumentProperty"];
會給你一個與每個Deal
實例相關聯的Instrument
實例的instrumentProperty
的值,假設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;
}
}
使用枚舉適當的集合。