2012-12-04 99 views
0

我有一個顯示在表中的數據數組。該數組有多個字段,其中包括兩個特定的字段,即「呼叫類型」和「縣」。 「呼叫類型」的值是「f」或「e」,郡的值是「w」或「c」。我想要有4個UISwitch來打開/關閉「w」,打開/關閉「c」等等。它很難解釋,但是如果你去這個網站看右上角,它正是什麼我想要做。 http://www.wccca.com/PITS/在4個過濾器中,兩個過濾器控制縣字段,兩個過濾器控制呼叫類型字段。但他們都獨立運作。我將如何去完成這件事?我會每次使用NSPredicate創建一個新的數組嗎?謝謝。iOS篩選數組

回答

0

你肯定可以使用NSPredicate這個。大概最容易做的事情是將用於所有四個開關相同IBAction,並讓它做一個重新計算:

- (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:導致文本是正確的那裏,然後解析。在這種情況下,應該沒有任何問題,但通常情況下,您可以預先創建謂詞並在相關時刻僅提供參數,如果您最終在真正時間關鍵的區域使用該參數。