2012-04-08 12 views
2

私のアプリケーションでは、私は約12000エントリの大きなテーブルを持っています。私はそれをtableviewに表示しています。しかし、動的検索を実行している間は検索バーが遅すぎます。私は、NSPredicateメソッドがNSRangeよりも順調であることを読んだ。オブジェクトとNSPredicate

これは私の古いコードです:

[self.filteredListContent removeAllObjects]; 
listContent = [[NSArray alloc] initWithArray:[dbAccess getAllBooks]]; 

for (Book *book in listContent) 
{ 

    NSRange range = [book.textBook rangeOfString:searchText options:NSCaseInsensitiveSearch]; 

    if (range.location != NSNotFound) 
    { 
     [self.filteredListContent addObject:book]; 
    } 
} 

私の新しいコード:

[self.filteredListContent removeAllObjects]; 
listContent = [[NSArray alloc] initWithArray:[dbAccess getAllBooks]]; 

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF like[c] %@",searchText]; 

[self.filteredListContent addObject:[listContent filteredArrayUsingPredicate:predicate]]; 

私はこのエラーを受け取った、このコードを実行しよう:「オブジェクトの正規表現マッチングを行うことはできません。 '"

+2

なぜ "SELF" ではなく "教科書"?言い換えれば、エンティティは探していませんが、 "searchText"を含む属性の場合 – moxy

+0

これはエラーの原因がわかりませんが、[self.filteredListContent addObject:[listContent filteredArrayUsingPredicate:predicate]]; self.filteredListContent = [listContent filteredArrayUsingPredicate:predicate]である必要があります。 – rdelmar

答えて

0

あなたのブッククラスは文字列ですか?そうでなければ、SELFのような使い方はできません。あなたは、比較しているプロパティの名前を代用する必要があります。

2

私のようなもっと何かをするだろう...

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%k like[c] %@",propertyIAmLookingFor,searchText];