Busca cualquier combinación de palabras o caracteres usando el controller searchDisplay en iOS

Hola, tengo una matriz maestra que llena la vista de tabla y tengo una matriz filtrada para los resultados de búsqueda. Ambos funcionan bien utilizando el siguiente método. Mi tabla de visualización y la matriz de visualización de búsqueda funcionan bien, excepto por el problema siguiente bajo este bloque de código.

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope 

{

 [self.filtenetworkingListContent removeAllObjects]; // First clear the filtenetworking array. for (product *new in parserData) { //Description scope if ([scope isEqualToString:@"Description"]) { NSRange result = [new.description rangeOfString:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)]; if (result.location != NSNotFound) { [self.filtenetworkingListContent addObject:new]; } } //Product scope if ([scope isEqualToString:@"Product"]) { NSRange result = [new.item rangeOfString:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)]; if (result.location != NSNotFound) { [self.filtenetworkingListContent addObject:new]; } } } 

}

Lo que me gustaría lograr es esto. Tengo un artículo en el set maestro llamado LMD-2451 TD Professional 3D LCD Monitor . Puedo search TD Professional , TD Pro , TD y devuelve el artículo correcto mencionado anteriormente usando cualquier caso. Sin embargo, si busco Pro TD no muestra ningún resultado. El problema que enfrento es que el usuario puede no saber el order en que podría ser el título o la descripción del producto. Entonces, tendría que implementar algo que haría esto lógicamente. Estoy realmente atrapado con qué hacer.

Para reference

NSMutableArray * parserData; // Completar la matriz completa principal NSMutableArray * filtenetworkingListContent; // Array para los resultados de búsqueda

Cualquier sugerencia sería muy apreciada.

¿Qué hay de utilizar componentsSeperatedByString:@" " en su cadena de búsqueda para dividirlo en (en su ejemplo) una matriz de 2 cadenas, @"Pro" y @"TD" . Luego rangeOfString: por la matriz usando el rangeOfString: verifique que todos los componentes en la matriz se encuentren en new.item .

 //Product scope if ([scope isEqualToString:@"Product"]) { // Split into search text into separate "words" NSArray * searchComponents = [searchText componentsSeparatedByString: @" "]; BOOL foundSearchText = YES; // Check each word to see if it was found for (NSString * searchComponent in searchComponents) { NSRange result = [new.item rangeOfString:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)]; foundSearchText &= (result.location != NSNotFound); } // If all search words found, add to the array if (foundSearchText) { [self.filtenetworkingListContent addObject: new]; } }