2011-07-13 24 views
5

Eso debería ser realmente simple pero no quiere funcionar. Quiero buscar CoreData usando un NSPredicate que use un NSRegularExpression. Me gustaría buscar myString o myString_10 (10 es cualquier número posible, por ejemplo myString_333).NSPredicate y NSRegularExpression

Este es mi código:

NSString *regexString = [NSString stringWithFormat:@"%@_[0-9]+", value]; 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:regexString 
                      options:NSRegularExpressionSearch         
                      error:&error]; 

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(label = %@) OR (label = %@)", value, regex]; 

valor es una cadena y la etiqueta es la clave de la entidad.

Si el valor es "Nuevo proyecto", NSFetchRequest devuelve una matriz con un objeto, aunque tengo dos etiquetas en mi modelo ("Nuevo proyecto" y "Nuevo proyecto_1") que deben buscarse.

¿Qué estoy haciendo mal?

Respuesta

3

La expresión regular debe ser un NSString o parte del predicado cuando se use. Ver Regular Expressions in the Predicate Programming Guide. Intente utilizar MATCHES en lugar de = y regexString en lugar de regex. Puede consultar ICU Regular Expressions para obtener patrones si tiene algún problema.

+0

Lo leí. No encontré la parte donde dice que la expresión regular debe ser parte de la cadena de predicados. Vea ese ejemplo: http://stackoverflow.com/questions/2458881/nspredicate-and-regex – strave

+0

Voy a editar y volver a redactarlo. El problema que estaba tratando de señalar es que estás usando 'NSRegularExpression' y no' NSString'. Aún puedes usar% @ pero con una cadena. – Joe

+0

¡Genial, funcionó! Ahora tengo la idea. ¡Muchas gracias! – strave

Cuestiones relacionadas