1

アプリに辞書を含むplist配列を入力します。辞書のキー「Freshness」の値は、飲み物の鮮度を示すバンドル画像の名前、「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

次に、この配列の残りのオブジェクトの1つに一致する辞書をに追加し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つを含むすべてのオブジェクトを追加します。

4

1 に答える 1

1

私が正しく理解している場合、解決しようとしている問題は、各辞書にあるキーに基づいて辞書の配列をフィルタリングすることです。

を使用NSPredicateしてこれを行うことができます。

「allItems」という名前の NSArray があり、配列内の各オブジェクトがキー「Freshness」を含む辞書であると仮定します。

鮮度が 2 のすべてのアイテムが必要だとします。

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

NSPredicates を使用して、大なり比較と小なり比較を行うこともできます。これは単なるイコールの例です。

于 2012-11-12T01:29:45.693 に答える