2015-10-19 3 views
1

У меня есть объект со следующей планировкой:NSPredicate подзапрос по всем значениям словаря

@interface Contact : NSObject 
@property (nonatomic, strong) NSString *username; 
@property (nonatomic, strong) NSDictionary *emails; 
@end 

Как вы можете видеть, что письма моделируются словарем с ключами, которые являются тегом электронной почты и значения для самих писем (т. е. @ {@ "home": @ me @ home.com "})

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

Мой запрос выглядит следующим образом:

NSPredicate *userName = [NSPredicate predicateWithFormat:@"self.username contains[cd] %@", self.searchFieldText]; 
NSPredicate *email = [NSPredicate predicateWithFormat:@"SUBQUERY(self.emails.allValues, $x, $x contains[cd] %@)[email protected] > 0", self.searchFieldText]; 
self.activeFilter = [NSCompoundPredicate orPredicateWithSubpredicates:@[userName,email]]; 

Любые мысли?

ответ

0

Моя вера вы отсутствует знак на-знак: emails.allValues ->[email protected]

NSPredicate *userName = [NSPredicate predicateWithFormat:@"username contains[cd] %@", self.searchFieldText]; 
NSPredicate *email = [NSPredicate predicateWithFormat:@"SUBQUERY([email protected], $x, $x contains[cd] %@)[email protected] > 0", self.searchFieldText]; 
self.activeFilter = [NSCompoundPredicate orPredicateWithSubpredicates:@[userName, email]]; 

Немного тестирование показывает, что он должен работать как только это будет исправлено.

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