web-dev-qa-db-fra.com

Requête NSPredicate pour ne pas contenir de chaîne spécifique

Semblait haut et bas pour celui-ci mais ne trouve pas ma réponse. Je cherche à interroger les données de base pour tous les enregistrements qui ne sont PAS égaux à une chaîne spécifiée. Par exemple, tous les enregistrements qui ne sont pas égaux à l'ID de session en cours. J'ai essayé ces derniers en vain:

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]];

Rien ne fonctionne.HEEEEELP !!! -------------------------------------------------- --- plus de code

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];
38
sangony

Votre premier prédicat

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"listingID != %@", sessionID];

devrait fonctionner pour trouver tous les enregistrements où l'attribut listingID n'est pas égal à sessionID (à condition que listingID et sessionID aient le même type).

Si les deux sont des chaînes et que vous souhaitez rechercher tous les enregistrements où listingIDne contient pas la chaîne sessionID en tant que sous-chaîne, ce prédicat devrait fonctionner:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT (listingID CONTAINS %@)", sessionID];

Utilisez "CONTAINS [cd]" si la comparaison de chaînes doit être effectuée en respectant la casse et les signes diacritiques.

NOTE : Vous pouvez spécifier le nom de l'attribut comme argument, mais vous devez alors utiliser %K au lieu de %@ comme format:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT (%K CONTAINS %@)", @"listingID", sessionID];
110
Martin R