我有一个具有以下布局的对象:
@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] %@).@count > 0", self.searchFieldText];
self.activeFilter = [NSCompoundPredicate orPredicateWithSubpredicates:@[userName,email]];
有什么想法吗?
答案 0 :(得分:0)
我的信念是你错过了一个签名:emails.allValues
- > emails.@allValues
NSPredicate *userName = [NSPredicate predicateWithFormat:@"username contains[cd] %@", self.searchFieldText];
NSPredicate *email = [NSPredicate predicateWithFormat:@"SUBQUERY(emails.@allValues, $x, $x contains[cd] %@).@count > 0", self.searchFieldText];
self.activeFilter = [NSCompoundPredicate orPredicateWithSubpredicates:@[userName, email]];
稍微测试表明它应该在修复后才能工作。