Как настроить NSPredicate, который фильтрует элементы в указанной группе с помощью NSFetchedResultsController

, у меня есть объект Group, который имеет много объектов Item. Элемент Item может быть в нескольких группах. Соответствующая часть моей модели выглядит следующим образом:

alt text

Проблема

Когда я звоню

[fetchedResultsController performFetch:&error]

, я получаю эту ошибку в консоли

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'to-many key not allowed here' ***

Я почти уверен, что проблема в том, как я настраиваю предикат здесь:

[NSPredicate predicateWithFormat:@"groups == %@", self.group];

Но я не могу сказать, что я делаю неправильно. Я' Я перечитал документы NSP предиката, и я попробовал это:

[NSPredicate predicateWithFormat:@"ANY groups IN %@", [NSArray arrayWithObject:self.group]];
[NSPredicate predicateWithFormat:@"ANY groups LIKE %@", self.group];
[NSPredicate predicateWithFormat:@"ANY groups == %@", self.group];
[NSPredicate predicateWithFormat:@"ANY groups IN %@", [NSArray arrayWithObject:self.group]];
[NSPredicate predicateWithFormat:@"groups == %@", self.group];

Ни один из которых не работает. Это должно быть просто, но я не могу понять это. Я просто хочу, чтобы предикат отфильтровал все элементы, чтобы они возвращали только те элементы, которые являются членами (через отношение модели) группы. Как вы это делаете?

У меня есть NSFetchedResultsController, который я пытаюсь настроить, чтобы показывать только элементы в определенной группе. Мой код для настройки NSFetchedResultsController выглядит следующим образом:

// create the fetch request
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

// configure the entity
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Item" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];

// configure the predicate
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"groups == %@", self.group];
[fetchRequest setPredicate:predicate];

// configure the sort descriptors
NSSortDescriptor *indexSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"uniqueID" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:indexSortDescriptor];
[fetchRequest setSortDescriptors:sortDescriptors];

// create the fetched results controller
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:@"ItemsCache"];

// configure the fetched results controller 
aFetchedResultsController.delegate = self;
5
задан Community 8 February 2017 в 14:29
поделиться