9

私はtableViewを持っていますsearchDisplayController。このテレビでは、配列 (名/姓) を使用する必要があります。述語を使用して、このコードでこの値を名前でフィルター処理できます。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.firstName beginswith[cd]%@",searchString];
self.filteredAllClients = [AllClients filteredArrayUsingPredicate:predicate];

2 つの述語を使用してこの配列をフィルタリングできますか?

例:私には名前があります (Jack Stone、Mike Rango)

  1. 「J」と入力すると、フィルター処理された配列を取得する必要があります - Jack Stone

  2. しかし、「R」と入力すると、フィルタリングされた領域が表示されます - マイク・ランゴ?

4

1 に答える 1

20

はい、このように...

NSPredicate *firstNamePredicate = [NSPredicate predicateWithFormat:@"self.firstName beginswith[cd]%@",searchString];
NSPredicate *lastNamePredicate = [NSPredicate predicateWithFormat:@"self.lastName beginswith[cd]%@",searchString];

NSPredicate *compoundPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:@[firstNamePredicate, lastNamePredicate]];

self.filteredAllClients = [AllClients filteredArrayUsingPredicate:compoundPredciate];

これにより、名が検索で始まる人、または姓が検索で始まる人がすべて表示されます。

コード全体が読みやすくなるため、単一の述語で OR と AND を使用するよりも、この形式を使用することを好みます。

これは、述語の NOT を取得するためにも使用できます。

単一の述語に複合述語が組み込まれている場合も、簡単に混乱する可能性があります。

于 2013-03-19T12:00:10.660 に答える