1

さまざまな検索の組み合わせでアプリを作成しました。

アプリには、テキストを入力して検索するための6つのテキストフィールドがあります。すべてのテキストフィールドは別の検索条件用です。

検索する前に入力する必要があるテキストフィールドは1つだけです。そのほか、ユーザーは入力して検索するテキストフィールドの数を選択できます。したがって、複数の検索の組み合わせが可能です。

問題は、どのテキストフィールドに入力するかを決定するための最良の方法と、検索条件を満たすオブジェクトを検索する方法です。

searchメソッドは、オブジェクトの配列(私の場合はemployeeオブジェクトの配列)をループして、値が一致するかどうかを確認する必要があります。

私の目標は、ifステートメントの量を制限することです。

アップデート:

これが今までの私のコードです:

-(IBAction)SearchEmployees:(id)sender{

NSString *fullName = [(textfieldName.text)uppercaseString];
NSString *functionName = [(textfieldFunction.text)uppercaseString];
NSString *department = [(textfieldDepartment.text)uppercaseString];
NSString *field = [(textfieldField.text)uppercaseString];
NSString *expertise = [(textfieldExpertise.text)uppercaseString];
NSString *interest = [(textfieldInterest.text)uppercaseString];

NSMutableDictionary *filledTextfields = [NSMutableDictionary dictionary];

if (![fullName isEqualToString:@""]){
    [filledTextfields setObject: fullName  forKey: @"fullName"];
}

if (![functionName isEqualToString:@""]){
    [filledTextfields setObject: functionName  forKey: @"functionName"];
}

if (![department isEqualToString:@""]){
    [filledTextfields setObject: department  forKey: @"department"];
}

if (![field isEqualToString:@""]){
    [filledTextfields setObject: field  forKey: @"field"];
}

if (![expertise isEqualToString:@""]){
    [filledTextfields setObject: expertise  forKey: @"expertise"];
}

if (![interest isEqualToString:@""]){
    [filledTextfields setObject: interest forKey: @"interest"];
}


NSMutableArray *foundEmployee = [[NSMutableArray alloc]init];

 for (id key in filledTextfields)
 {
     NSLog(@"KEY: %@ OBJECT: %@", key, [filledTextfields objectForKey:key]);

     for (Employee *employee in self.employees){    //self.employees is the array to search in
         //do something
     }

 }
4

2 に答える 2

2

NSMutableDictionary を使用し、配列の内容を辞書に追加し、適切な検索用語を辞書のキーとして使用します。その後、何かを検索するときに、テキスト フィールドからテキストを取得するだけで済みます。[dictionary objectForKey:textfieldText]適切なオブジェクトを返すか、その検索語のオブジェクトがない場合は nil を返します。

検索基準がどのように機能するか正確にはわかりませんが、これは機能する可能性があります。

于 2013-02-08T10:17:14.693 に答える
1

配列をフィルタリングするために「複合述語」を作成します。

NSMutableArray *predicates = [NSMutableArray array];
if ([textFieldName.text length] > 0) {
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"fullName =[c] %@", textFieldName.text];
    [predicates addObject:pred];
}
if ([textfieldFunction.text length] > 0) {
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"functionName =[c] %@", textfieldFunction.text];
    [predicates addObject:pred];
}
// ... same procedure for remaining search criteria ...

if ([predicates count] > 0) { // At least one search criterion
    NSPredicate *finalPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:predicates];
    NSArray *foundEmployees = [self.employees filteredArrayUsingPredicate:finalPredicate];
}

=[c]大文字と小文字を区別しない比較を行います。BEGINSWITH[c]必要に応じてまたはを使用することもできCONTAINS[c]ます。

述語は Key-Value コーディングを使用するためfullNamefunctionNameなどは従業員オブジェクトのプロパティである必要があります。

于 2013-02-08T14:24:52.520 に答える