Osc*_*mez 4 iphone join core-data nspredicate
我一直在寻找通过本网站的文档和其他一些帖子,但我根本无法理解如何解决这个问题,这在SQL中实际上非常简单.
基本上我有2个实体仪器和交易.并且"交易"使用"工具"来执行期望的操作.现在我想列出交易属性和用于此交易的工具属性.所以在SQL中我会做:
SELECT*FROM Instruments INNER JOIN交易ON Instruments.ID = Deals.InstrumentID
我如何通过NSPredicate实现这一目标?任何帮助都会受到很大的影响.谢谢.
-Oscar
Bar*_*ark 12
首先,您应该尽力摆脱SQL思维模式.核心数据不是 ORM.它是一个对象图管理框架,恰好使用SQLite作为一个可能的持久性后端.虽然您可以通过环境变量查看它使用的SQL(用于调试),但SQL是私有实现细节.核心数据本来可以在没有任何SQL的情况下实现.
所以,尽量不要考虑db表.你有一系列的Deal善意.你想要他们的财产吗?使用键值编码来获取这些实例和相关Instrument实例的属性.假设您有一个NSSet实例Deals,称为deals:
[deals valueForKey:@"dealProperty"];
Run Code Online (Sandbox Code Playgroud)
将为您提供每个实例NSSet的值.如果您想一次获得多个属性,可以使用.你只能使用这种方法获得"一级深度"的密钥,所以只有,例如'dealProperty1','dealProperty2',而不是'dealRelation.relationProperty'或'dealRelation.@count'.dealPropertyDeal-[NSObject(NSKeyValueCoding) dictionaryWithValuesForKeys:]
要获得"嵌套"属性,只需使用键路径:
[deals valueForKeyPath:@"instrument.instrumentProperty"];
Run Code Online (Sandbox Code Playgroud)
会给你一组的值的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;
}
}
Run Code Online (Sandbox Code Playgroud)
使用适当集合的枚举.
| 归档时间: |
|
| 查看次数: |
5811 次 |
| 最近记录: |