首先,你应该尽你所能摆脱 SQL 思维模式。Core Data不是ORM。它是一个对象图管理框架,恰好使用 SQLite 作为一种可能的持久性后端。虽然您可以通过环境变量(用于调试)查看它使用的 SQL,但 SQL 是私有的实现细节。Core Data 完全可以在没有任何 SQL 的情况下实现。
所以,尽量不要考虑数据库表。你有一个实例集合Deal
。你想要他们的属性吗?使用键值编码来获取这些实例和相关Instrument
实例的属性。假设您有一个名为的NSSet
实例:Deals
deals
[deals valueForKey:@"dealProperty"];
将为您提供每个实例NSSet
的值。如果要一次获取多个属性,可以使用. 您只能使用此方法获取“一级深度”的密钥,因此只能获取例如“dealProperty1”、“dealProperty2”而不是“dealRelation.relationProperty”或“dealRelation.@count”。dealProperty
Deal
-[NSObject(NSKeyValueCoding) dictionaryWithValuesForKeys:]
要获得“嵌套”属性,只需使用关键路径:
[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;
}
}
使用适当集合的枚举。