Swift核心数据预测 我想要完成什么?
我有一个包含三个核心数据实体的应用程序:配料、饼干和Cookie配料Swift核心数据预测 我想要完成什么?,swift,core-data,nsfetchedresultscontroller,Swift,Core Data,Nsfetchedresultscontroller,我有一个包含三个核心数据实体的应用程序:配料、饼干和Cookie配料 配料是鸡蛋、牛奶、黄油等,还有一个Bool指示我厨房里是否有这些配料 饼干是巧克力片、燕麦葡萄干等 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实体与成分实体之间的关系目前在两端都配置为“对多”,因为一块饼干可以有很多成分,一种成分可以用于很多饼干。我弄错了吗?是否只应在一个方向上设置为“多个”?我对您的模型感到困惑-您可以编辑您的问题以包含图片吗?谢谢-我通过中间配方实体将直接多个关系与关系混合在一起。但我看到你找到了正确的组合!