8

次のスニペットの前者は機能するのに、後者は機能しないのはなぜですか?

スニペット 1

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(coin_unique == %@)", [NSNumber numberWithInt:species]];

スニペット 2

// Does NOT Work
NSString *predicateText = @"coin_unique";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(%@ == %@)", predicateText, [NSNumber numberWithInt:species]];

メソッドで受け取った引数に応じて、述語を動的に作成する必要があります。

4

2 に答える 2

18

coin_uniqueはキーであるため、%Kフォーマット指定子が必要です。

NSString *predicateText = @"coin_unique";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(%K == %@)", predicateText, [NSNumber numberWithInt:species]];

フォーマットの構文については、こちらで詳しく説明しています

于 2013-03-19T16:36:24.700 に答える