我有一个 Item
实体和一个 Wishlist
实体 . 项目可以在多个愿望清单中,愿望清单可以包含多个项目 .
使用列出所有愿望清单的 WishlistTableViewController
,我想选择一个并显示所选项目中的所有项目 . 我将 Wishlist
项目发送到我的 ItemTableViewController
,但我坚持创建一个谓词 .
基本上,我想从给定的愿望清单中获取所有物品 .
在SQL中,它将是这样的:
SELECT * FROM Item WHERE WishlistItem.wishlist_id = wishlist.wishlist_id
(可能缺少内连接,这是一个非常粗略的草图,我多年没有编写SQL)
当然,当我们有多对多关系时,Core Data会自动创建该中间表,那么我如何使用 NSPredicate
创建一个类似的谓词呢?我有我的获取结果控制器此刻得到所有项目,没有谓词(它是 nil
) . 如果用户不是来自某个心愿单,那么这是默认行为 .
2 回答
如果"wishlists"是从Item到Wishlist的多对多关系,则可以使用以下谓词来获取与所选列表相关的所有项目:
使用Core Data,您通常会 Build 多对多关系 .
Item
会有一个名为wishlists
的多对多关系,Wishlist
会有一个名为items
的多对多关系,这些关系会相互颠倒 .通过这些关系,谓词是不必要的 . 如果你想获得愿望清单的所有物品,你就是这么做的
或者,如果您有自定义
NSManagedObject
子类,则可以执行以下操作: