在不知道参数类型的情况下很难说出精确的建议,但是,据我所知,您需要有四个变量,更有可能是 NSStrings,并且每次用户更改参数时,您都会创建一个新的通过以正确的格式附加所有变量来获取谓词。这就是我一般的看法。
更新
因此,使用 Market 和 Tag 按钮,一切都非常明显 - 你应该使用NSCompondPredicate
. 您将需要一组谓词,因此请创建一个属性。
@property (strong) NSMutableArray *subpredicates;
然后,每次用户触摸按钮时,您都会添加或删除该缩小谓词。
- (void)tagButtonTouched:(UIButton *)button
{
if (thisTagIsNotYetSelected)
[subpredicates addObject:[NSPredicate predicateWithFormat:@"ANY tags.name == %@", button.titleLabel.text]];//or some other predicate based on that button title
else
[subpredicates removeObject:[NSPredicate predicateWithFormat:@"ANY tags.name == %@",button.titleLabel.text] ]];
}
同样的事情Markets
- (void)marketButtonTouched:(UIButton *)button
{
if (thisMarketIsNotYetSelected)
[subpredicates addObject:[NSPredicate predicateWithFormat:@"ANY markets.name == %@", button.titleLabel.text]];//or some other predicate based on that button title
else
[subpredicates removeObject:[NSPredicate predicateWithFormat:@"ANY markets.name == %@",button.titleLabel.text] ]];
}
您还应该添加两个变量,我猜,NSPredicates
或者NSString
,它们将保存选定的值FeedType
,让PhotoType
我们分别调用它们。当用户触摸这些开关时(为什么不使用分段控件?),您只需更改它们的值。feedTypePredicate
photoTypePredicate
最后,您应该将所有这些谓词组合成一个并进行获取!
if(photoTypePredicate)
[subpredicates addObject:photoTypePredicate];
if(feedTypePredicate)
[subpredicates addObject:feedTypePredicate];
NSPredicate *finished = [NSCompoundPredicate andPredicateWithSubpredicates:subpredicates];//Your final predicate