Запрос NSPredicate для не содержащей конкретной строки
Посмотрел высоко и низко для этого, но не смог найти мой ответ. Я ищу запрос данных ядра для всех записей, которые НЕ равны указанной строке. Например, все записи, которые не равны текущему идентификатору сеанса. Я пробовал это безрезультатно:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"listingID != %@", [sitListingID objectAtIndex:i]];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%@ NOT CONTAINS[cd] %@",@"listingID", [sitListingID objectAtIndex:i]];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%@ NOT CONTAINS %@",@"listingID", [sitListingID objectAtIndex:i]];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"listingID NOT like %@", [sitListingID objectAtIndex:i]];
Ничего не работает .HEEEEELP!!!
-------------------------------------------------- --- больше кода
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"ListingRecord" inManagedObjectContext:context];
[request setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"sessionID <> %@", uniqueSessionListings];
[request setPredicate:predicate];
NSError *error = nil;
NSMutableArray *mutableFetchResults = [[context executeFetchRequest:request error:&error] mutableCopy];
Ответы
Ответ 1
Ваш первый предикат
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"listingID != %@", sessionID];
должен работать, чтобы найти все записи, где атрибут listingID
не равен sessionID
(при условии, что listingID
и sessionID
имеют один и тот же тип).
Если обе строки и вы хотите найти все записи, где listingID
не содержит строку sessionID
в качестве подстроки, то этот предикат должен работать:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT (listingID CONTAINS %@)", sessionID];
Используйте "CONTAINS [cd]", если сравнение строк должно выполняться в случайном и диакритическом режиме.
ПРИМЕЧАНИЕ. Вы можете указать имя атрибута в качестве аргумента, но тогда вы должны использовать %K
вместо %@
как формат:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT (%K CONTAINS %@)", @"listingID", sessionID];