significa serie sensitive sensible que minusculas mayusculas mac insensitive cambiar objective-c cocoa core-data

objective c - serie - NSPredicar coincidencia insensible a mayúsculas y minúsculas en relación a-muchos



key sensitive (5)

Estoy implementando un campo de búsqueda donde el usuario puede escribir una cadena para filtrar los elementos que se muestran en una vista. Cada objeto que se muestra tiene una relación keywords a muchos, y me gustaría poder filtrar los objetos en función de sus palabras clave. Cada objeto de palabra clave tiene una propiedad de name , así que configuré un NSPredicate para hacer el filtrado que se ve así:

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"keywords.name CONTAINS %@", self.searchString];

Esto funciona, pero el problema es que la búsqueda distingue entre mayúsculas y minúsculas, por lo que si la palabra clave tiene una letra mayúscula pero el usuario escribe en minúsculas, no se encuentran coincidencias. Probé la siguiente modificación:

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"keywords.name CONTAINS[c] %@", self.searchString];

Pero eso no hace ninguna diferencia en la sensibilidad de la coincidencia. ¿Hay alguna forma de hacer esta coincidencia insensible a mayúsculas y minúsculas utilizando solo un predicado simple? ¿O tendré que implementar algún tipo de acceso personalizado en la clase de palabra clave, por ejemplo, escribir un método de lowercaseName y coincidir con una versión en minúscula de la cadena de búsqueda?

Adición: Después de una exploración más profunda, la solución alternativa de agregar un acceso personalizado funciona bien para el uso manual de NSPredicate, pero no funciona cuando se usa NSFetchRequest con Core Data, que solo funciona cuando se consultan los atributos definidos en el modelo de datos básicos.


Creo que la respuesta es:

[NSPredicate predicateWithFormat:@"keywords.name CONTAINS[cd] %@", self.searchString];

Las comparaciones de cadenas son, por defecto, sensibles a mayúsculas y diacríticas. Puede modificar un operador utilizando los caracteres de las teclas c y d entre llaves cuadradas para especificar la insensibilidad a mayúsculas y minúsculas, respectivamente, por ejemplo firstName BEGINSWITH [cd] $ FIRST_NAME.

Sintaxis de cadena de formato de predicado


Si debe hacer coincidir la palabra clave, pero la búsqueda debe ser mayúscula y minúscula, debe usar NSPredicate(format: "keywords.name =[c] %@", self.searchString)

LIKE no funciona en literales de cadena.


Si está tratando de captar solo los nombres iguales pero con caso insensible, creo que es la mejor solución

[NSPredicate predicateWithFormat:@"ANY keywords.name LIKE[c] %@", ...];

Me ayudaste mucho. ¡¡¡Gracias chicos!!!

En mi caso lo hice:

[NSPredicate predicateWithFormat:@"ANY name LIKE[c] %@", @"teste"];


Si lo entiendo correctamente, quiere que su predicado sea verdadero siempre que el nombre de una palabra clave coincida con la cadena de búsqueda. Para esto debes probar con la palabra clave ANY como esta:

[NSPredicate predicateWithFormat:@"ANY keywords.name CONTAINS[c] %@", ...];

Esto buscará las palabras clave y devolverá verdadero si alguna de esas palabras clave contiene su cadena de búsqueda.


Si quieres tanto mayúsculas como minúsculas y comodín, utiliza esto:

NSPredicate *predicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"(name like[c] ''*%@*'')",@"search"]];