ios - NSPredicate compare con Entero
swift 3 nspredicate (2)
Si está utilizando predicateWithSubstitutionVariables: y el valor que desea predicar es NSNumber con valor entero, entonces necesita usar NSNumber en predicado en lugar de NSString como valor de sustitución. Eche un vistazo al ejemplo:
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]]}];
}
¿Cómo puedo comparar dos NSNumbers o NSNumber y un Integer en NSPredicate?
Lo intenté:
NSNumber *stdUserNumber = [NSNumber numberWithInteger:[[NSUserDefaults standardUserDefaults] integerForKey:@"standardUser"]];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"userID == %@", stdUserNumber];
Bueno, esto no funciona ... ¿alguien tiene una idea de cómo hacerlo? Estoy seguro de que es bastante fácil, pero no pude encontrar nada ...
NSNumber
es un tipo de objeto. A diferencia de NSString
, el valor real de NSNumber no se sustituye cuando se utiliza con el formato %@
. intValue
obtener el valor real utilizando los métodos predefinidos, como intValue
que devuelve el valor entero. Y use el sustituyente de formato como %d
ya que vamos a sustituir un valor entero.
El predicado debería ser,
predicateWithFormat:@"userID == %d", [stdUserNumber intValue]];