1

int型のクラスメンバー「total」があります。述語の属性として「total」を使用しています。

[NSPredicate predicateWithFormat: @"total ==%i", [searchText intValue]];

この述語は、検索の実行時に一致を収集するために使用されます。述語は、iVarに格納されているsearchText、テキスト型のユーザーの検索値を、int型の属性「total」と比較します。

私はこのように簡単に同等性をチェックすることができます:

 NSPredicate *filter = [NSPredicate predicateWithFormat: @"total ==%i", [searchText  intValue]];

ここで、述語をより堅牢にし、テキスト検索のように機能させたいので、ユーザーが検索ボックスに「5」と入力すると、述語は5,52,550などを返します。

つまり、属性である「total」を述語フィルターの文字列として扱い、BEGINSWITHまたはCONTAINSを使用できるようにします。

私の問題は、属性「total」が文字列ではなくint型であるため、スタックしていることです。

これが私の意図です(擬似コード)

NSPredicate *filter = [NSPredicate predicateWithFormat: @"[total stringValue] BEGINSWITH %@", searchText];

または

  NSPredicate *filter = [NSPredicate predicateWithFormat: @"CAST(total, 'NSString' ) BEGINSWITH %@", searchText];

クラスに文字列型を作成せずにこれを行うにはどうすればよいですか?

ありがとう!

4

2 に答える 2

1

[NSString stringWithFormat:@"%d"]整数から文字列に何かを変換する方法です。述語宣言とインラインにすることができます。

やり方は

文字列型を作成せずに

文字列を作成せずに文字列として何かを使用する方法について混乱しています。

述語は次のようになります。

NSPredicate *predicate = [NSPredicate predicateWithFormat:
                          @"(content BEGINSWITH[c] %@)", [NSString stringWithFormat:@"%d",total]];
于 2012-07-27T16:38:26.367 に答える
0

これを行う 1 つの (やや大雑把な) 方法は、次のような述語を生成することです。

total == %d OR total / 10 == %d OR total / 100 == %d OR total / 1000 == %d...

小さな最大値の合計が持つ可能性があることを知っていると仮定します。

于 2012-07-27T20:20:44.737 に答える