NSPredicate żądanie dotyczące braku określonego ciągu


Wyglądało na wysokie i niskie dla tego, ale nie mogę znaleźć odpowiedzi. Szukam podstawowego zapytania o dane dla wszystkich rekordów, które NIE są równe podanemu ciągowi. Na przykład wszystkie rekordy, które nie są równe identyfikatorowi bieżącej sesji. Próbowałem ich bezskutecznie:
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]];

Nic nie działa.
-------------------------------------------------- --- więcej kodu
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];

Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Twój pierwszy predykat
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"listingID != %@", sessionID];

powinien działać, aby znaleźć wszystkie wpisy, w których atrybut
listingID
nie jest równy
sessionID
(zakładając, że
listingID
i
sessionID
to tego samego typu).
Jeśli oba są ciągami i chcesz znaleźć wszystkie wpisy, w których
listingID

nie zawiera

string
sessionID
jako podciąg, to ten predykat powinien działać:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT (listingID CONTAINS %@)", sessionID];

Użyj „ZAWIERA [cd]”, jeśli porównania ciągów mają być wykonywane bez rozróżniania wielkości liter.

NOTE
: możesz podać nazwę atrybutu jako argument, ale musisz użyć
% K
zamiast
% @
jako formatu:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT (%K CONTAINS %@)", @"listingID", sessionID];

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się