1

title、enddate などの複数のパラメータに基づいて eventList 配列を検索したい... [cd] %@ のようなパラメータ タイトルを 1 つだけ使用する場合、次のコードを使用しています。

        NSCharacterSet *whitespace = [NSCharacterSet whitespaceAndNewlineCharacterSet];
        NSString *trimmed = [searchBar.text stringByTrimmingCharactersInSet:whitespace];
        if([trimmed isEqualToString:@""]==NO)
        {
            //        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"title like[cd] %@",[NSString stringWithFormat:@"*%@*", searchBar.text]];
            NSPredicate *predicate = [NSPredicate predicateWithFormat:@"title like[cd] %@ ||  enddate like[cd] %@  ",[NSString stringWithFormat:@"*%@*", searchBar.text],[NSString stringWithFormat:@"*%@*", searchBar.text]];

            NSLog(@"Main Array:%@",arrMain);
            eventsList =(NSMutableArray*) [arrMain filteredArrayUsingPredicate:predicate];
            [eventsList retain];
            NSLog(@"Search Result:%@",eventsList);
            [eventTable reloadData];
        }

NSPredicate predicate = [
NSPredicate predicateWithFormat:@"(title like[cd] %@) OR (enddate like[cd] %@) ",[NSString stringWithFormat:@" %@ ", searchBar.text],[ NSString stringWithFormat:@" %@*", searchBar.text]];

それも機能しますが、特定の日付を検索しているため正確ではありませんが、表示されませんが、2またはpまたはaを書き込むと、一部の結果に対してのみ機能します...したがって、完全ではなく、終了日がフォーマットの文字列であると言えます2012-09-04 18:28:02 誰でもこれで私を助けることができます....

4

2 に答える 2

3

個々の述語の適切なコレクションを NSCompoundPredicate に組み立てます

のように

NSMutableArray *parr = [NSMutableArray array];
if([brand_one length]) { 
    [parr addObject:[NSPredicate predicateWithFormat:@"(title like[cd] %@) OR (enddate like[cd] %@) ",[NSString stringWithFormat:@"*%@*", searchBar.text],[NSString stringWithFormat:@"*%@*", searchBar.text]]];
}
if([brand_two length]) { 
     // etc 
}

NSCompoundPredicate *cpred = [NSCompoundPredicate andPredicateWithSubpredicates:parr];

orPredicateWithSubpredicates: と andPredicateWithSubpredicates: を使用して述語を積み重ねることができ、NSPredicate である NSCompoundPredicate 自体を複合することができます。

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSCompoundPredicate_Class/Reference/Reference.htmlを参照してください。

于 2012-09-04T17:30:45.277 に答える
0

で行った

        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(title like[cd] %@) OR (enddate like[cd] %@) ",[NSString stringWithFormat:@"*%@*", searchBar.text],[NSString stringWithFormat:@"*%@*", searchBar.text]];

2012-09-04 18:28:02 形式の日付が含まれているデータベースを確認しましたが、他の形式で表示されていました。

于 2012-09-04T17:09:17.783 に答える