在NSStrings中搜索的代码建议

时间:2012-11-12 00:59:01

标签: objective-c

我使用带字典的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时,猜猜我想要发生什么。从allObjectsArraysearchResultsArray添加具有正确新鲜度的对象。有关代码过滤的建议吗?

我在考虑使用包含所有级别图像路径的可变数组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对象之一的所有对象。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您要解决的问题是根据每个词典中的键过滤一系列词典。

您可以使用NSPredicate执行此操作。

假设您有一个名为“allItems”的NSArray,并且数组中的每个对象都是包含“Freshness”键的字典。

假设你想要所有新鲜度为2的物品。

NSArray *filtered = [allItems filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(Freshness == %@)", @"level2.png"]];

您还可以使用NSPredicates进行大于或小于比较。这只是一个相同的例子。