我的 nspredicate 是否需要子查询才能正常工作?
Is a subquery needed for my nspredicate to work properly?
我有一组自定义对象,它们有床 (1,2,3)、壁炉(是或否)、书房(是或否)和天花板高度 (9-11,11-14,14- 16).我需要允许基于 any/all/none 被选择作为过滤依据的项目进行过滤。因此,用户可能希望看到 1 和 2 张床、书房、壁炉和 9-11 英尺高的天花板。或者只有 1 和 2 张床。我当前的谓词适用于其中一些。但它并不匹配所有 - 只有一些。我在想我需要一个子查询。如何基于过滤器数组创建嵌套(?)子查询?
现在,用户选择按钮,这些按钮与过滤器匹配,我使用它们来创建我的谓词。
当前谓词
Filters is an array of keys and predicate strings like 'beds, 1' and 'ceilings, 9-11'
`NSMutableArray *subPredicates = [NSMutableArray array];
for (Filter*fil in filters) {
NSPredicate *unitsPredicate = [NSPredicate predicateWithFormat:@"%K == %@", fil.key, fil.predicate];
[subPredicates addObject:bedsPredicate];
}
NSPredicate *predicate = [NSCompoundPredicate andPredicateWithSubpredicates:subPredicates];
NSLog(@"homes: %@", [searchArray filteredArrayUsingPredicate:predicate]);
NSArray *ar = [searchArray filteredArrayUsingPredicate:predicate];
我想允许某人选择任何条件和 return 适当的数据。
子查询用于对多关系。如果要过滤多个值,则 fil.predicate
的 class 应该是一个值数组(或集合)。谓词格式为%K IN %@
,例如
for (Filter*fil in filters) {
NSPredicate *unitsPredicate;
if ([fil.predicate isKindOfClass:[NSArray class]])
unitsPredicate = [NSPredicate predicateWithFormat:@"%K IN %@", fil.key, fil.predicate];
else
unitsPredicate = [NSPredicate predicateWithFormat:@"%K == %@", fil.key, fil.predicate];
[subPredicates addObject:bedsPredicate];
}
NSPredicate *predicate = [NSCompoundPredicate andPredicateWithSubpredicates:subPredicates];
我有一组自定义对象,它们有床 (1,2,3)、壁炉(是或否)、书房(是或否)和天花板高度 (9-11,11-14,14- 16).我需要允许基于 any/all/none 被选择作为过滤依据的项目进行过滤。因此,用户可能希望看到 1 和 2 张床、书房、壁炉和 9-11 英尺高的天花板。或者只有 1 和 2 张床。我当前的谓词适用于其中一些。但它并不匹配所有 - 只有一些。我在想我需要一个子查询。如何基于过滤器数组创建嵌套(?)子查询?
现在,用户选择按钮,这些按钮与过滤器匹配,我使用它们来创建我的谓词。
当前谓词
Filters is an array of keys and predicate strings like 'beds, 1' and 'ceilings, 9-11'
`NSMutableArray *subPredicates = [NSMutableArray array];
for (Filter*fil in filters) {
NSPredicate *unitsPredicate = [NSPredicate predicateWithFormat:@"%K == %@", fil.key, fil.predicate];
[subPredicates addObject:bedsPredicate];
}
NSPredicate *predicate = [NSCompoundPredicate andPredicateWithSubpredicates:subPredicates];
NSLog(@"homes: %@", [searchArray filteredArrayUsingPredicate:predicate]);
NSArray *ar = [searchArray filteredArrayUsingPredicate:predicate];
我想允许某人选择任何条件和 return 适当的数据。
子查询用于对多关系。如果要过滤多个值,则 fil.predicate
的 class 应该是一个值数组(或集合)。谓词格式为%K IN %@
,例如
for (Filter*fil in filters) {
NSPredicate *unitsPredicate;
if ([fil.predicate isKindOfClass:[NSArray class]])
unitsPredicate = [NSPredicate predicateWithFormat:@"%K IN %@", fil.key, fil.predicate];
else
unitsPredicate = [NSPredicate predicateWithFormat:@"%K == %@", fil.key, fil.predicate];
[subPredicates addObject:bedsPredicate];
}
NSPredicate *predicate = [NSCompoundPredicate andPredicateWithSubpredicates:subPredicates];