Я пытаюсь извлечь объекты из основных данных, которые не находятся в заданном наборе, но я не смог заставить его работать.
Например, предположим, что у нас есть основной объект данных с именем User, который имеет несколько атрибутов, таких как userName, familyName, givenName и active. Учитывая массив строк, представляющих набор имен пользователей, мы можем легко получить всех пользователей, соответствующих этому списку имен пользователей:
NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] init];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"User"
inManagedObjectContext:moc];
[request setEntity:entity];
NSArray *userNames = [NSArray arrayWithObjects:@"user1", @"user2", @"user3", nil];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"userName IN %@", userNames];
[request setPredicate:predicate];
NSArray *users = [moc executeFetchRequest:request error:nil];
Однако я хочу получить дополнение к этому набору, т.е. хочу, чтобы все пользователи в основных данных не имели имен пользователей, указанных в массиве userNames. Кто-нибудь есть идея, как подойти к этой проблеме? Я думал, что было бы достаточно просто добавить "NOT"
в предикат (i.e., "userName NOT IN %@")
, но Xcode выдает исключение, говорящее, что предикатный формат не может быть проанализирован. Я также попытался использовать построитель предикатов, доступный для запросов на выборку, без везения. Документация также не была особенно полезной. Предложения? Комментарии? Спасибо за вашу помощь:)