ios core-data nspredicate

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]];