0

我有一个Item实体和一个Wishlist实体。一个项目可以在多个愿望清单中,一个愿望清单可以包含多个项目。

使用WishlistTableViewController列出所有愿望清单的 ,我想选择一个并显示该选定列表中的所有项目。我将Wishlist项目发送到 my ItemTableViewController,但我坚持创建谓词。

基本上,我想从给定的愿望清单中获取所有项目。

在 SQL 中,它会是这样的:

SELECT * FROM Item WHERE WishlistItem.wishlist_id = wishlist.wishlist_id

(可能缺少内部连接,这是一个非常粗略的草图,我已经多年没有编写 SQL)

当然,当我们有多对多关系时,Core Data 会自动创建该中间表,那么我将如何使用创建类似的谓词NSPredicate呢?我现在让我的获取结果控制器获取所有项目,没有谓词(它是nil)。如果用户不是来自某个愿望清单,这是默认行为。

4

2 回答 2

1

如果 "wishlists" 是从ItemWishlist的一对多关系,您可以使用以下谓词来获取与所选列表相关的所有项目:

WhishList *selectedWishList = ...;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY wishlists == %@", selectedWishList];
于 2013-05-24T19:24:30.773 回答
1

使用 Core Data,您通常会建立多对多关系。Item将有一个称为 的一对多关系wishlistsWishlist将有一个称为 的一对多关系items,并且这些关系将彼此相反。

对于这些关系,谓词是不必要的。如果您想获得愿望清单中的所有物品,您只需

Wishlist *wishlist = ... // passed in from WishlistTableViewController

NSSet *items = [wishlist valueForKey:@"items"];

或者,如果您有自定义NSManagedObject子类,您可以这样做:

NSSet *items = [wishlist items];
于 2013-05-24T23:13:50.850 回答