2012-04-23 9 views
8

Estoy usando NSPredicate para la búsqueda de rendimiento como lo hace en el iPhone cuando buscamos cualquier aplicación.NSPredicate para la búsqueda regular

tengo decir, por ejemplo, 4 palabras clave

  1. Deccan
  2. Nueva Delhi
  3. Ahmedabad
  4. Salaam Delhi

He intentado crear un predicado con

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"keyword BEGINSWITH[c] 'd'" Me da Deccan como salida. Pero el problema es que quiero cada palabra que empiece con d Así en el ejemplo anterior Necesito salida como Deccan, Nueva Delhi, Salaam Delhi pero NO Ahmedabad

Stucked en este número de horas. tratado contiene, partidos, pero mi mala suerte ..

será realmente apreciado Cualquier ayuda hacia el camino correcto ..

Respuesta

13

gracias a todos por su respuesta s Esto es lo que se me ocurrió

NSString *matchString = [NSString stringWithFormat: @".*\\b%@.*",searchText]; 
NSString *predicateString = @"keyword MATCHES[c] %@"; 
NSPredicate *predicate =[NSPredicate predicateWithFormat: predicateString, matchString]; 
1

Hay dos vías para que

  1. Divida la steing por '' y usar su NSPredicate *predicate = [NSPredicate predicateWithFormat:@"keyword BEGINSWITH[c] 'd'"]
  2. O bien, la mejor manera, el uso de dos predicados:

predicate = [NSPredicate predicateWithFormat:@"keyword BEGINSWITH[c] 'd' OR keyword contains[c] ' d'"] // i mean,'space+d'

Por lo tanto, satisfará ambos casos posibles.

+0

gracias @Nikita. Funciona con un solo carácter estático. pero tome un ejemplo donde los personajes se vuelven dinámicos. Si escribo d, aparece tres opciones y cuando escribo 'del' aparece la palabra clave 2 y 4 –

0

Considere "me gusta" y "coincidencias". Tenga en cuenta, sin embargo, que estas son operaciones relativamente costosas, y pueden tomar un tiempo considerable en grandes conjuntos de datos.

En este ejemplo, supongo que lo que quiere es hacer coincidir si alguna palabra separada por espacios de entrada comienza con "d"

Esto comprueba si la palabra clave o bien comienza con 'd' o tiene una secuencia con una seguido de 'd'

[NSPredicate predicateWithFormat:@"(keyword BEGINSWITH[c] 'd') OR (keyword LIKE[c] '* d')"] 

Ésta utiliza una expresión regular, que es muy similar (utilizar la expresión regular que mejor se adapte a su situación:

[NSPredicate predicateWithFormat:@"keyword MATCHES[c] '^d.*|.*\\sd.*'"] 
Cuestiones relacionadas