фильтрующий массив словарей с двумя строками


Для выпадающей таблицы поиска мне нужно показать "Description "и" SearchTerms " в ячейке textlabel и detailed Textlabel соответственно. Мне нужно реализовать фильтр, который основан на двух строках, т. е. текст поиска должен быть сопоставлен как с "описанием", так и с "SearchTerms". Я пробовал NSPredicate, но он может фильтровать только для одной строки

NSString *substring = [NSString stringWithString:searchServiceTextField.text];
NSLog(@"substring %@",substring);
NSMutableArray *arr2Filt= [searchArray valueForKey:@"Description"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF  contains[c] %@",substring];
NSArray *filteredarr = [NSMutableArray arrayWithArray:[arr2Filt filteredArrayUsingPredicate:predicate]];
NSLog(@"filtered array %@",filteredarr);

Я попытался изменить для обеих строк, но я не получил лучшего soultion.

  [{
        Description = "Rental Jewellery, Jewellery for events";
        ProfessionId = "<null>";
        SKUFormat = "<null>";
        SearchTerms = "Rental Jewellery";
        SpecialityId = 62;
        tokens = "<null>";
        value = "<null>";
    },
    {
        Description = "Kids Party with Food and Games Venues";
        ProfessionId = "<null>";
        SKUFormat = "<null>";
        SearchTerms = "Party Venue";
        SpecialityId = 63;
        tokens = "<null>";
        value = "<null>";
    },
    {
        Description = "Music, Dance, Sports classes";
        ProfessionId = "<null>";
        SKUFormat = "<null>";
        SearchTerms = Classes;
        SpecialityId = 64;
        tokens = "<null>";
        value = "<null>";
    },
    {
        Description = "Zumba, Yoga, Aerobics classes";
        ProfessionId = "<null>";
        SKUFormat = "<null>";
        SearchTerms = "Fitness/Health";
        SpecialityId = 65;
        tokens = "<null>";
        value = "<null>";
    }
    ]
1 2

1 ответ:

Вы можете сделать, как

NSString *substring = [NSString stringWithString:searchServiceTextField.text];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"Description contains[c] %@ AND SearchTerms contains[c] %@",substring, substring];
NSArray * filteredarr =[[searchArray filteredArrayUsingPredicate:predicate] copy];

NSLog(@"filtered array %@",filteredarr);