Core data 核心数据谓词和表达式疯狂

Core data 核心数据谓词和表达式疯狂,core-data,Core Data,我想这是为核心数据专家准备的。也许这只是超出了它应该的范围。。。无论如何: 在iOS上,使用sqlite持久存储 我有这样的实体: A> B当您使用setPropertiesToFetch时:您告诉fetch忽略所有其他属性。这意味着在a属性上键入的@a==%@谓词将被忽略 在本例中,您可能需要将@a==%@谓词转换为NSSubqueryExpressionType相等表达式,然后将该表达式作为数组中传递给setPropertiesToFetch:的第一个表达式 这将指示提取首先查找与@a==%

我想这是为核心数据专家准备的。也许这只是超出了它应该的范围。。。无论如何:

在iOS上,使用sqlite持久存储

我有这样的实体: A> B当您使用setPropertiesToFetch时:您告诉fetch忽略所有其他属性。这意味着在a属性上键入的@a==%@谓词将被忽略

在本例中,您可能需要将@a==%@谓词转换为NSSubqueryExpressionType相等表达式,然后将该表达式作为数组中传递给setPropertiesToFetch:的第一个表达式

这将指示提取首先查找与@a==%@匹配的所有B对象,然后针对该组对象运行v表达式

然而,当您发现自己必须创建复杂的谓词时,这通常表明您的数据模型设计得很糟糕。通常,由于您试图在谓词中创建逻辑关系,而不是在数据模型中对它们进行建模,因此最终会得到复杂的谓词

此外,作为一项规则,当您手中有一个特定对象,例如someA和/或someC时,您根本不进行提取,而是遍历关系。当您可以只使用someA.bObjects时,为什么要获取与someA对象相关的所有B对象

我认为您的数据模型实际上是这样的:

A<-->>B<<-->C
…现在您所要做的就是查找具有最新日期的B对象:

BClass *someB=[secSet valueForKeyPath:@"@max.dateAttribute"];

…你就完了。迭代该过程以查找多个A和C对象之间的交点

您的数据模型图中是否有输入错误?关于谓词被忽略的第一点,看起来应该是一个>B,我不认为是这样,因为上面的代码工作正常。我想我可能要在“代码”而不是“数据库”中进行计算。我的直觉是尝试通过正确的核心数据op“编写sql”来进行计算,而不是在代码中,因为在代码中进行计算将产生关系目标的每个对象,并且可能有很多对象。也许这只是一种错误的思考方式。最后,关于@max.attribute-谢谢,我不知道这是可能的!
NSMutableSet *secSet=[[NSMutableSet setWithSet:someA.bs] intersectSet:someC.bs];
BClass *someB=[secSet valueForKeyPath:@"@max.dateAttribute"];