NSPnetworkingicate en un NSArray para search cualquier object

Tengo una variedad de objects con nombres, direcciones, tel. nos, etc.

Quiero poder search la matriz para cualquier aparición de un término, ya sea en el campo de nombre, el campo de dirección, etc.

Tengo algo así en mente:

-(void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope { // Update the filtenetworking array based on the search text and scope. // Remove all objects from the filtenetworking search array [self.searchResults removeAllObjects]; // Filter the array using NSPnetworkingicate NSPnetworkingicate *pnetworkingicate = [NSPnetworkingicate pnetworkingicateWithFormat:@"SELF contains[c] %@",searchText]; searchResults = [NSMutableArray arrayWithArray:[contactArray filtenetworkingArrayUsingPnetworkingicate:pnetworkingicate]]; } 

Esto provoca una exception "No se puede usar en / contiene operador con colección".

ACTUALIZAR. Ahora puedo search en hasta tres campos. Cuando agrego un cuarto (en cualquier secuencia), obtengo esta exception: "No se puede analizar la cadena de formatting …"

El código del Pnetworkingicado ahora es:

 NSPnetworkingicate *pnetworkingicate = [NSPnetworkingicate pnetworkingicateWithFormat:@"SELF.narrative contains[c] %@ OR SELF.category contains[c] %@ OR SELF.date contains[c] OR SELF.name contains[c] %@", searchText, searchText, searchText, searchText]; searchResults = [NSMutableArray arrayWithArray:[allDreams filtenetworkingArrayUsingPnetworkingicate:pnetworkingicate]]; 

¿Tres son los límites de los campos de búsqueda de pnetworkingicados? ¿Cómo obtengo esto? Gracias de nuevo.

Simplemente use una cadena de pnetworkingicado que los compruebe a todos:

 @"name contains[cd] %@ OR address contains[cd] %@" 

Puedes agregar tantos como quieras.

El único inconveniente es que deberá agregar la misma cadena de búsqueda para cada campo que desee probar, lo que puede parecer un poco feo.

Si sus objects son dictionarys, entonces hay una manera de search realmente todos los valores sin necesariamente conocer sus nombres en time de compilation, usando una subconsulta.

Funciona así:

 @"subquery(self.@allValues, $av, $av contains %@).@count > 0" 

Utiliza la key especial @allValues (o llamada de método si así lo prefiere) para objects de dictionary y la utiliza para filtrar cualquier valor que contenga su cadena de búsqueda. Si se encuentra alguno (es decir, el recuento es positivo), el object se incluye en los resultados.

Tenga en count que esto examinará todos los valores indiscriminadamente, incluso aquellos que no desee include si tiene alguno en su dictionary.

Creo que tu elemento de matriz no es una cadena pura, ¿verdad?

Supongamos que su elemento de matriz contiene un atributo de name (incluso es un dictionary), puede searchlo de esta manera:

 NSPnetworkingicate * pnetworkingicate = [NSPnetworkingicate pnetworkingicateWithFormat:@"name CONTAINS[cd] %@ OR name LIKE[cd] %@", searchText, searchText]; 

aquí, el name puede ser SELF.name .


AQUÍ es un documento oficial.