NSPredicateの2つのNSNumbersまたはNSNumberとIntegerを比較するにはどうすればよいですか?
私は試した:
NSNumber *stdUserNumber = [NSNumber numberWithInteger:[[NSUserDefaults standardUserDefaults] integerForKey:@"standardUser"]];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"userID == %@", stdUserNumber];
まあ、これはうまくいきません...誰もそれを行う方法を知っていますか?かなり簡単だと思いますが、何も見つかりませんでした...
NSNumber
はオブジェクト型です。 NSString
とは異なり、NSNumberの実際の値は、%@
形式で使用した場合、置き換えられません。整数値を返すintValue
などの事前定義されたメソッドを使用して、実際の値を取得する必要があります。そして、整数値を置換するため、%d
としてフォーマット置換を使用します。
述語は、
predicateWithFormat:@"userID == %d", [stdUserNumber intValue]];
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]]}];
}