/ / NSP обявете за двустранна връзка с много, използвайки Core Data? - обективна, базисна информация, много към много, връзка, връзка

NSPпредикация за двустранни отношения с множество взаимоотношения, използващи Core Data? - цел-в, основни данни, много, към много, nspredicate, отношения

имам Item субект и а Wishlist образувание. Елементът може да бъде в множество списъци с желания, а списък с желания може да съдържа няколко елемента.

С WishlistTableViewController, в който са изброени всички списъци с желания, искам да избера един от тях и да покажа всички елементи в него. Изпращам Wishlist елемент към моя ItemTableViewController, но аз съм затворен в създаването на предикат.

По принцип искам да получа всички елементи от даден списък с желания.

В SQL, това ще бъде нещо като:

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

(може да липсват вътрешни съединения, това е много груба скица, аз не съм кодирал SQL в години)

Разбира се, данните от ядрото автоматично създават тази средна таблица, когато имаме връзки с много към много, така че как да създам подобен предикат с помощта на NSPredicate? Имам моите прихванати резултати контролер получават всички елементи в момента, без предикат (тя nil). Това е поведението по подразбиране, ако потребител не идва от определен списък с желания.

Отговори:

1 за отговор № 1

Ако "списъци с желания" е връзката "до-много" от Вещ да се списък с желания, можеш да използваш следния предикат за получаване на всички елементи, свързани с избрания списък:

WhishList *selectedWishList = ...;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY wishlists == %@", selectedWishList];

1 за отговор № 2

С Core Data обикновено ще установите връзка много към много. Item ще се нарича много отношения wishlists, Wishlist ще се нарича много отношения itemsи тези взаимоотношения ще бъдат обратни.

С тези отношения предикатът не е необходим. Ако искате да получите всички елементи за списък с желания, просто ще го направите

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

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

Или ако имате обичай NSManagedObject подкласове, можете да направите това:

NSSet *items = [wishlist items];