Swift核心数据预测 我想要完成什么?

Swift核心数据预测 我想要完成什么?,swift,core-data,nsfetchedresultscontroller,Swift,Core Data,Nsfetchedresultscontroller,我有一个包含三个核心数据实体的应用程序:配料、饼干和Cookie配料 配料是鸡蛋、牛奶、黄油等,还有一个Bool指示我厨房里是否有这些配料 饼干是巧克力片、燕麦葡萄干等 cookie配料是每种饼干所需的每种配料的单位 我想能够显示哪些饼干,我可以做的基础上,我已经指出哪些成分是在我的厨房 我做了什么? 我已经成功地让我的应用程序进入一个状态,所有这些实体都在核心数据中管理,我能够毫无问题地将配料标记为“在我的厨房”。我可以根据配料和标题搜索饼干 我被困在哪里了? 我找不到任何例子来帮助理解如

我有一个包含三个核心数据实体的应用程序:配料、饼干和Cookie配料

  • 配料是鸡蛋、牛奶、黄油等,还有一个Bool指示我厨房里是否有这些配料
  • 饼干是巧克力片、燕麦葡萄干等
  • cookie配料是每种饼干所需的每种配料的单位
我想能够显示哪些饼干,我可以做的基础上,我已经指出哪些成分是在我的厨房

我做了什么? 我已经成功地让我的应用程序进入一个状态,所有这些实体都在核心数据中管理,我能够毫无问题地将配料标记为“在我的厨房”。我可以根据配料和标题搜索饼干

我被困在哪里了?
我找不到任何例子来帮助理解如何创建NSPredicate,以将我的FetchedResultsController限制为只有Cookie配料的所有配料都在“我的厨房”中的Cookie。如果这是一个使用MySQL数据库的web应用程序,我可以通过一些内部连接来实现这一点,但我不知道如何通过核心数据实现类似的功能,甚至不知道是否有可能实现类似的功能。

像下面这样的谓词应该可以工作:

let predicate = NSPredicate(format: "ALL ingredients.inKitchen = YES")

这假设您的
Cookie
实体有一个
components
关系,带有一个名为
inKitchen
boolean
标志,如果您正在获取
Cookie
对象,那么谓词需要遍历到
CookieComponent
的(对多)关系,并从那里遍历(对一)与
成分的关系
。所以谓词应该是这样的:

let predicate = NSPredicate(format: "ALL cookieIngredients.ingredient.inKitchen = YES")
这假设从
Cookie
CookieComponents
的关系称为“CookieComponents”,从
CookieComponents
Components
的关系称为“Components”)

我发现CoreData对许多关系(即任意、全部、无、某些)的解析有点不可预测,所以我倾向于使用子查询来获得我想要的结果。在上述情况下,(注意所有inKitchen=YES相当于说none have inKitchen=NO),我将使用:

let predicate = NSPredicate(format: "SUBQUERY(cookieIngredients, $X, $X.ingredient.inKitchen == NO).@count == 0")
解决方案 以下是对我有效的谓词:


NSPredicate(格式:“子查询(CookieComponents,$X,$X.in_kitchen==true)。@count==CookieComponents@count”)

我觉得你是对的,这应该行得通。我确实在
Cookie
上有
components
关系,在
components
实体上有
Boolean
标志。但它不起作用。我得到
不支持的谓词所有项。in_kitchen==1
。谓词如下所示:
NSPredicate(格式:“ALL items.in_kitchen=true”)
知道我可能做错了什么吗?仅供参考:我尝试将其更改为==而不是=但仍然没有骰子。我尝试了使用
NSPredicate的第一个版本(格式:“ALL cookiecomponents.in_kitchen==true”)
它只是抛出
不支持的谓词ALL
错误。在本例中,
CookieComponents
是Cookie实体与Components实体之间的关系\n我还尝试了第二个版本作为
NSPredicate(格式:“SUBQUERY(cookiecomponents,$X,$X.in\u kitchen==false)。@count==0”)
,这不会崩溃,但也不会返回正确的Cookies。它不会返回系统中的所有Cookie,但它会返回一堆Cookie,而我没有这些Cookie的所有成分。这里有一个想法:Cookie实体与成分实体之间的关系目前在两端都配置为“对多”,因为一块饼干可以有很多成分,一种成分可以用于很多饼干。我弄错了吗?是否只应在一个方向上设置为“多个”?我对您的模型感到困惑-您可以编辑您的问题以包含图片吗?谢谢-我通过中间配方实体将直接多个关系与关系混合在一起。但我看到你找到了正确的组合!