Die*_*con 6 objective-c nspredicate
我有一个被调用的类的实例数组Contact,其中包括以下属性:
NSArray *mailAddressList // Array of NSString
NSArray *websiteList // Array of NSString
NSArray *tags // Array of instances of Tag class
Run Code Online (Sandbox Code Playgroud)
类标记具有以下属性:
NSString *name;
UIColor *color;
Run Code Online (Sandbox Code Playgroud)
我想使用NSPredicate在每个属性的任何属性中搜索字符串Contact.这是我的代码:
if([scope isEqualToString:SCOPE_MAIL] || [scope isEqualToString:SCOPE_WEBSITE])
{
// Search through an array
predicate = [NSPredicate predicateWithFormat:@"ANY SELF.%@ contains[c] %@", scope, textSearch];
}
else if([scope isEqualToString:SCOPE_TAG])
{
// Search another object's property
predicate = [NSPredicate predicateWithFormat:@"SELF.%@.name contains[c] %@", scope, textSearch];
}
else
{
// The rest of the properties are instances of NSString
predicate = [NSPredicate predicateWithFormat:@"SELF.%@ contains[c] %@", scope, textSearch];
}
Run Code Online (Sandbox Code Playgroud)
一切正常,除了SCOPE_TAG,它不返回任何值.我不认为我正确使用谓词.
注意:我是NSPredicate的新手,所以如果我正在做的事情不好,我想听听一些见解
首先,如果你替换一个键路径,你应该使用%Karg.
此外,我认为你错过了ANY第二个查询中的参数.如果任何标签名称包含您的结果,我想您想要一个结果textSearch.
要更好地理解谓词的工作原理,请查看Apple文档
我做了一个快速测试,它仍然工作正常:
NSMutableArray *arrayContacts = [NSMutableArray array];
{
AMContact *contact = [[AMContact alloc] init];
NSMutableArray *arrayTags = [NSMutableArray array];
{
AMTags *tag = [[AMTags alloc] init];
tag.name = @"Test";
[arrayTags addObject:tag];
}
{
AMTags *tag = [[AMTags alloc] init];
tag.name = @"Te2st2";
[arrayTags addObject:tag];
}
{
AMTags *tag = [[AMTags alloc] init];
tag.name = @"No";
[arrayTags addObject:tag];
}
contact.tags = [arrayTags copy];
[arrayContacts addObject:contact];
}
{
AMContact *contact = [[AMContact alloc] init];
NSMutableArray *arrayTags = [NSMutableArray array];
{
AMTags *tag = [[AMTags alloc] init];
tag.name = @"Test";
[arrayTags addObject:tag];
}
contact.tags = [arrayTags copy];
[arrayContacts addObject:contact];
}
NSPredicate *pred = [NSPredicate predicateWithFormat:@"ANY SELF.%K.name contains[c] %@", @"tags", @"Test"];
NSArray *result = [arrayContacts filteredArrayUsingPredicate:pred];
NSLog(@"%@", result);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10396 次 |
| 最近记录: |