gpt4 book ai didi

objective-c - 使用 NSPredicate 搜索对象数组

转载 作者:太空狗 更新时间:2023-10-30 03:42:13 27 4
gpt4 key购买 nike

我有一个名为 Contact 的类的实例数组,该类具有以下属性:

NSArray *mailAddressList // Array of NSString
NSArray *websiteList // Array of NSString
NSArray *tags // Array of instances of Tag class

类标签具有以下属性:

NSString *name;
UIColor *color;

我想使用 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];
}

SCOPE_TAG 外,一切正常,它不返回任何值。我认为我没有正确使用谓词。

注意:我是 NSPredicate 的新手,所以如果我做的不对,我想听听一些见解

最佳答案

首先,如果您替换键路径,您应该使用 %K 作为参数。

此外,我认为您在第二个查询中缺少 ANY 参数。如果任何标签名称包含您的 textSearch,我认为您需要一个结果。

要更好地了解谓词的工作原理,请查看 Apple Documentation

我做了一个快速测试,它仍然工作正常:

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);

关于objective-c - 使用 NSPredicate 搜索对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20626435/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com