0

nsmutable 配列のコンテンツの一部を取得するために使用していますが、クエリを作成するために nsstring を使用しない場合は正常に機能します。

NSLog(@"user information %@", [usersInfo filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"%K == 'Joe", @"id"]]);

しかし、nsstring を使用してユーザーを照会しようとしても、うまくいきません。

NSString *user="Joe";

NSLog(@"user information %@", [usersInfo filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"%K == user", @"id"]]]);

私が間違っていることを知っている人はいますか?または、NSString を使用してユーザーのクエリを実行する最善の方法は何でしょうか?

4

5 に答える 5

1

あなたが書くとき

NSString *user = @"Joe";
... [NSPredicate predicateWithFormat:@"%K == user", @"id"]

述語の「user」が NSString 変数の内容 (「Joe」) に置き換えられることを期待しているようですが、これは正しくありません。

文字列を別の引数として述語に指定し%@、文字列によって展開される形式を追加する必要があります。

NSString *user = @"Joe";
... [NSPredicate predicateWithFormat:@"%K == %@", @"id", user]

ここで%K(キー pathの var arg 置換) は key に置換され、"id"(%@オブジェクト値の var arg 置換) はuser変数の内容に置換されます。

%K代わりに拡張を使用する

[NSPredicate predicateWithFormat:@"id == %@", user]

キーが述語フォーマット文字列構文の予約語であっても正しく機能するという利点があります。

于 2013-06-28T19:34:05.483 に答える
0

これを試してください:</p>

NSString *user="Joe";

NSLog(@"user information %@", [usersInfo filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF contains [cd] %@", user]]]);
于 2013-07-02T09:01:52.530 に答える
-2

使用する:

NSLog(@"user information %@", [usersInfo filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:[NSString stringWithFormat:@"%K == '%@'",@"id",user]]]);

使用する場合:

NSLog(@"user information %@", [usersInfo filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"%K == user", @"id"]]]);"

ユーザーは文字列の一部になり、NSString オブジェクトのコンテンツに置き換えられません。

于 2013-06-28T18:56:02.273 に答える