我使用带字典的plist数组填充我的应用程序。字典中“新鲜度”键的值是包装图像的名称,用于显示饮品中的新鲜程度,“level1.png”,“level2.png”,“level3.png”,“level4.png “,”level5.png“,”level6.png“或”level7.png“。
我添加了一个UIStepper,因此用户可以指定饮料的最小和最大新鲜度,如下所示:
- (void)viewDidLoad
{
[super viewDidLoad];
minImageView.image = [UIImage imageNamed:@"level1.png"];
maxImageView.image = [UIImage imageNamed:@"level7.png"];
}
- (IBAction)minStepperValueChanged:(id)sender {
double stepperValue = minStepper.value;
minImageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"level%.f.png", stepperValue]];
maxStepper.minimumValue = minStepper.value;
minStepper.maximumValue = maxStepper.value;
minLabel.text = [NSString stringWithFormat:@"From level %.f", stepperValue];
}
- (IBAction)maxStepperValueChanged:(id)sender {
double stepperValue = maxStepper.value;
maxImageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"level%.f.png", stepperValue]];
maxStepper.minimumValue = minStepper.value;
minStepper.maximumValue = maxStepper.value;
maxLabel.text = [NSString stringWithFormat:@"To level %.f", stepperValue];
}
调用searchButtonPressed
时,猜猜我想要发生什么。从allObjectsArray
到searchResultsArray
添加具有正确新鲜度的对象。有关代码过滤的建议吗?
我在考虑使用包含所有级别图像路径的可变数组levelsArray
,然后在levelsArray
时删除低于最小值或高于searchButtonPressed
的最大值的对象。
然后将与此数组的其余对象之一匹配的词典添加到searchResultsArray
。但是我在这方面扭曲了我的大脑,我真的需要一些帮助。非常感谢!
修改
我已经开始这样做了:
-(IBAction)searchButtonPressed:(id)sender{
for(double i=otherCriteriasViewController.minStepper.value;i>1;i--) {
[otherCriteriasViewController.levelsArray removeObject:[NSString stringWithFormat:@"level%.f.png", i-1]];
}
for(double ii=otherCriteriasViewController.maxStepper.value;ii<7;ii++) {
[otherCriteriasViewController.levelsArray removeObject:[NSString stringWithFormat:@"level%.f.png", ii+1]];
}
现在我想添加包含levelsArray对象之一的所有对象。
答案 0 :(得分:1)
如果我理解正确,您要解决的问题是根据每个词典中的键过滤一系列词典。
您可以使用NSPredicate
执行此操作。
假设您有一个名为“allItems”的NSArray,并且数组中的每个对象都是包含“Freshness”键的字典。
假设你想要所有新鲜度为2的物品。
NSArray *filtered = [allItems filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(Freshness == %@)", @"level2.png"]];
您还可以使用NSPredicates进行大于或小于比较。这只是一个相同的例子。