2015-04-16 2 views
5

У меня есть один массив, который содержит массив словаря и строку , и я хочу, чтобы фильтр со значением словаря, , но когда я делаю фильтрацию, я получаю результат только при вводе первой буквы в текстовое поле Я написал этот код для nspredicate search также я добавил скриншот для NSarry, содержащий значения, которые я использую для фильтрации.Фильтр-массив из массива словаря и строки

Вот код для поиска массива:

- (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); 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@ ",searchStr]; 
    NSArray *filteredArr = [arrmainData filteredArrayUsingPredicate:predicate]; 
    detailListArray=[[NSMutableArray alloc]initWithArray:filteredArr]; 
    [tblGlosary reloadData]; 

    return true; 
} 

Вот ScreenSnap для массива

enter image description here

ответ

0

У вас есть массив смешанных типов (NSString и NSDictionary), который, как правило, очень плохо Идея (и будет невозможна в Swift).

Если вы по какой-то причине не может контролировать это и в самом деле нужно фильтровать через него вы должны проверить, что вы правильно сравнить в зависимости от типа:

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 *filteredArray = [arrmainData objectsAtIndexes:matches]; 

Но опять-таки, если вы можете, действительно пересмотреть смешивания в том же массиве, вероятно, это приведет к проблемам в будущем.

Смежные вопросы