Как отфильтровать nsdictionary? - PullRequest
2 голосов
/ 27 сентября 2011

Я хочу искать данные из nsdictionary на основе различных критериев. Скажем, у меня есть 4 ключа, и пользователь может искать по любому количеству ключей, например: 4,3 и т. Д. Например: у меня есть словарь, содержащий ключи (Имя, ФамилияИмя, адрес, номер телефона). Теперь пользователь может выполнять поиск по любому ключу, например, «Имя» и «Фамилия», или только «Имя». Я использую NSPredicate для поиска. Моя проблема заключается в том, как создать динамический nspredicate? Если я предоставляю пустую строку в

[NSPredicate predicateWithFormat:@"FirstName  CONTAINS[cd] %@ AND LastNAme  CONTAINS[cd] %@ AND Address  CONTAINS[cd] %@ AND PhoneNumber  CONTAINS[cd] %@",firstname,lastname,addr,phone]

Это не дает никакого результата. Как я могу этого добиться? Или мне нужно создать несколько nspredicate на основе полей, предоставленных пользователем?

Заранее спасибо!

1 Ответ

2 голосов
/ 27 сентября 2011

Вы можете построить предикат программно:

NSArray *keysToSearch = [NSArray arrayWithObjects:@"FirstName", @"LastName", @"Address", nil];
NSString *searchString = @"Bob";

NSMutableArray *subPredicates = [NSMutableArray array];
for (NSString *key in keysToSearch) {
  NSPredicate *p = [NSPredicate predicateWithFormat:@"%K contains[cd] %@", key, searchString];
  [subPredicates addObject:];
}

NSPredicate *filter = [NSCompoundPredicate andPredicateWithSubPredicates:subPredicates];

Затем используйте filter для фильтрации ваших словарей.

...