web-dev-qa-db-ja.com

NSPredicateと整数の比較

NSPredicateの2つのNSNumbersまたはNSNumberとIntegerを比較するにはどうすればよいですか?

私は試した:

NSNumber *stdUserNumber = [NSNumber numberWithInteger:[[NSUserDefaults standardUserDefaults] integerForKey:@"standardUser"]];
    fetchRequest.predicate = [NSPredicate predicateWithFormat:@"userID == %@", stdUserNumber];

まあ、これはうまくいきません...誰もそれを行う方法を知っていますか?かなり簡単だと思いますが、何も見つかりませんでした...

36
wolfrevo

NSNumberはオブジェクト型です。 NSStringとは異なり、NSNumberの実際の値は、%@形式で使用した場合、置き換えられません。整数値を返すintValueなどの事前定義されたメソッドを使用して、実際の値を取得する必要があります。そして、整数値を置換するため、%dとしてフォーマット置換を使用します。

述語は、

predicateWithFormat:@"userID == %d", [stdUserNumber intValue]];
90
EmptyStack

PredicateWithSubstitutionVariables:を使用しており、述語にしたい値が整数値を持つNSNumberである場合、NSStringの代わりにNSStringを置換値として使用する必要があります。例を見てみましょう:

NSPredicate *genrePredicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"genreID == $GENRE_ID"]]; //if we make only one NSPredicate if would look something like this: [NSPredicate predicateWithFormat:@"genreID == %d", [someString integerValue]];

NSPredicate *localPredicate = nil;
for(NSDictionary *genre in genresArray){
    localPredicate = [genrePredicate predicateWithSubstitutionVariables:@{@"GENRE_ID" : [NSNumber numberWithInteger:[genre[@"genre_id"] integerValue]]}];
}
3
Josip B.