0

テーブルに表示されるデータの配列があります。配列には複数のフィールドがあり、フィルタリングしたい 2 つの特定のフィールド、「通話タイプ」と「郡」を含みます。「通話タイプ」の値は「f」または「e」で、郡の値は「w」または「c」のいずれかです。「w」をオン/オフしたり、「c」をオン/オフしたりするための4つのUISwitchが必要です。説明するのは難しいですが、このWebサイトにアクセスして右上隅を見ると、まさに私はやってみたいです。http://www.wccca.com/PITS/ 4 つのフィルタのうち、2 つのフィルタは国フィールドを制御し、2 つのフィルタはコール タイプ フィールドを制御します。しかし、それらはすべて独立して動作します。これを達成するにはどうすればよいですか?何かがフィルタリングされるたびに NSPredicate を使用して新しい配列を作成しますか? ありがとう。

4

1 に答える 1

0

あなたは間違いなくNSPredicateこれに使用することができます。おそらく最も簡単な方法は、IBAction4つのスイッチすべてに同じものを使用して、再計算を実行させることです。

- (IBAction)anySwitchDidChange:(id)sender
{
    // make a set of all acceptable call types
    NSMutableSet *acceptableCallTypes = [NSMutableSet set];
    if(self.fSwitch.on) [acceptableCallTypes addObject:@"f"];

    // ... etc, to create acceptableCallTypes and acceptableCounties

    NSPredicate *predicate = 
        [NSPredicate predicateWithFormat:
                            @"(%@ contains callType) and (%@ contains county)", 
                            acceptableCallTypes, acceptableCounties];

    /*
       this predicate assumes your objects have the properties 'callType' and 
       'county', and that you've filled the relevant sets with objects that would
       match those properties via isEqual:, whether strings or numbers or
       anything else.

       NSDictionaries are acceptable since the internal mechanism used here is
       key-value coding.
    */

    NSArray *filteredArray = [_sourceArray filteredArrayUsingPredicate:predicate];

    // send filteredArray to wherever it needs to go
}

を使用するpredicateWithFormat:と、テキストがその場で解析されます。この場合、それは何の問題もありませんが、一般に、事前に述語を作成し、本当にタイムクリティカルな領域で述語を使用することになった場合に備えて、関連する瞬間にパラメーターのみを提供できます。

于 2012-12-04T00:51:07.477 に答える