objective objective-c ios core-data nsstring nspredicate

objective-c - nspredicate objective c



NSPredicar concordancia exacta con cadena (2)

Tengo una NSPredicate como esta:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"entity.name CONTAINS %@", myString];

Pero eso devolverá cualquier cosa que contenga esa cadena. Por ejemplo: si my entity.name está donde:

text texttwo textthree randomtext

y el myString era text entonces todas esas cadenas coincidirían. Me gustaría que si myString es text , solo devuelva el primer objeto con el nombre de text y si myString fuera de texto randomtext devolverá el cuarto objeto con el nombre de texto randomtext . También estoy buscando que sea insensible a las mayúsculas y que ignora el espacio en blanco


Esto debería hacerlo:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"entity.name LIKE[c] %@", myString];

LIKE coincide con cadenas? y * como comodines. El [c] indica que la comparación debe ser insensible a mayúsculas y minúsculas.

Si no quieres? y * para ser tratados como comodines, puede usar == lugar de LIKE :

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"entity.name ==[c] %@", myString];

Más información en la documentation sintaxis de cadena de formato predicado NSPredicate.


Puede usar el matcher de expresiones regulares con su predicado, así:

NSString *str = @"test"; NSMutableString *arg = [NSMutableString string]; [arg appendString:@"//s*//b"]; [arg appendString:str]; [arg appendString:@"//b//s*"]; NSPredicate *p = [NSPredicate predicateWithFormat:@"SELF matches[c] %@", arg]; NSArray *a = [NSArray arrayWithObjects:@" test ", @"test", @"Test", @"TEST", nil]; NSArray *b = [a filteredArrayUsingPredicate:p];

El fragmento de código anterior construye una expresión regular que coincide con cadenas con espacios en blanco opcionales al principio y / o al final, con la palabra de destino rodeada por los marcadores de "límite de palabra" /b . La [c] después de las matches significa "unir insensiblemente las mayúsculas y minúsculas".

Este ejemplo usa una matriz de cadenas; para que funcione en su entorno, reemplace SELF con entity.name .