9

UISearchBar を使用してリスト内の番号を検索するために NSPredicate を使用しています。文字列の場合は機能しますが、整数の場合は機能しません

次の述語を使用しています

predicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"%@ contains[c]  %d", @"number", [searchBar.text intValue]]];
[objectArray filterUsingPredicate:predicate];
[tableview reloadData];

たとえば、1 と入力すると、配列内のすべてのものをリストする必要があります。== を試してみましたが、これを回避しようとすると、正確な数に対してのみ機能します。

このメソッドを使用すると、「コレクションで in/contains 演算子を使用できません」というエラーが表示されるようになりました。

4

2 に答える 2

17

この述語はあなたのために働くはずだと思います:

predicate = [NSPredicate predicateWithFormat:@"self.number.stringValue CONTAINS %@",searchBar.text];

これについて考えた後、なぜ self.number.stringValue が機能するのかわかりませんが、テストしたところ機能しました (self.number は int です)。stringValue を int に送信できる理由がわかりませんか?

于 2012-08-19T04:34:48.940 に答える
-1

述語は扱いにくい場合があるため、おそらく別の方法がうまくいくでしょう。

NSInteger index = 0;
while (index < objectArray.count)
{
    NSString *currentString = [objectArray objectAtIndex:index];
    if ([currentString rangeOfString:searchBar.text].length == 0)
    {
        [objectArray removeObjectAtIndex:index];
        continue;
    }
    index++;
} 

ここで、searchBar テキストを含まない配列内の文字列はすべて削除されます。

于 2012-08-19T04:26:07.703 に答える