Array de filter de matriz de dictionary y cadena

Tengo una matriz que contiene una matriz de dictionary y cadena y quiero filtrar con el valor del dictionary, pero cuando estoy haciendo un filter, obtengo un resultado solo cuando escribo la primera letra en el campo de text. He escrito este código para la búsqueda de nspnetworkingicate también tengo La captura de pantalla adjunta para NSarry contiene valores que yo uso para filtrar.

Aquí hay un código para la matriz de búsqueda:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string; // return NO to not change text { NSString * searchStr = [textField.text stringByReplacingCharactersInRange:range withString:string]; NSLog(@"%@",searchStr); NSPnetworkingicate *pnetworkingicate = [NSPnetworkingicate pnetworkingicateWithFormat:@"SELF contains[c] %@ ",searchStr]; NSArray *filtenetworkingArr = [arrmainData filtenetworkingArrayUsingPnetworkingicate:pnetworkingicate]; detailListArray=[[NSMutableArray alloc]initWithArray:filtenetworkingArr]; [tblGlosary reloadData]; return true; } 

Aquí hay screensnap para array

introduzca la descripción de la imagen aquí

Tiene una variedad de types mixtos ( NSString y NSDictionary ) que generalmente es una mala idea (y no será posible en Swift).

Si por alguna razón no puede controlar esto y realmente necesita filtrarlo, debe verificar que compare correctamente según el tipo:

 NSIndexSet *matches = [arrmainData indexesOfObjectsPassingTest:BOOL^(id obj, NSUInteger idx, BOOL *stop) { NSString *stringToCompare = nil; if ([obj isKindOfClass:[NSString class]]) { stringToCompare = (NSString *)obj; } else { NSDictionary *dict = (NSDictionary *)obj; stringToCompare = dict["Name"]; } return [stringToCompare rangeOfString:searchString].location != NSNotFound; }]; NSArray *filtenetworkingArray = [arrmainData objectsAtIndexes:matches]; 

Pero una vez más, si puede, realmente reconsidere los types de mezcla en la misma matriz, es probable que genere problemas en el futuro.