objective c - ¿Comparando NSNumber a 0 no funciona?
objective-c json (4)
Tengo un analizador JSON en mi aplicación y cargo el valor en una variable detailDataSourceDict. Cuando trato de obtener el valueForKey de la matriz e intento compararlo con 0, nunca funciona ...
Aquí está mi código:
if (indexPath.row == 1) {
NSNumber *rating = [detailDataSourceDict valueForKey:@"rating"];
NSLog(@"Rating: %@",rating);
if (rating == 0) {
cell.detailTextLabel.text = @"This sheet has not yet been rated.";
}
else {
cell.detailTextLabel.text = [NSString stringWithFormat:@"This sheet has a %@ star rating.",rating];
}
cell.textLabel.text = @"Rating";
}
Veo en mi feed JSON que "rating": "0", pero cuando la calificación es 0, muestra "Esta hoja tiene una calificación de 0 estrellas", en lugar de "Esta hoja aún no se ha calificado".
¿Alguna sugerencia? Gracias.
NSNumber es un objeto y debe acceder a su valor con los accesores de valor.
[NSNumber intValue];
Consulte "Acceso a valores numéricos" @:
Quieres cambiarlo desde:
if (rating == 0) {
A
if ([rating intValue] == 0) {
NSNumber *rating
es un objeto. 0
es un tipo primitivo. Los tipos primitivos se pueden comparar con ==
. Los objetos no pueden; necesitan ser comparados para la igualdad usando isEqual:
Así reemplaza esto:
rating == 0
con:
[rating isEqual:@0]
( @0
es un NSNumber literal )
o alternativamente:
rating.integerValue == 0
La razón por la que su código incorrecto incluso se compila es que 0
es igual a 0x0
que a su vez es igual a nil
(de alguna manera, evitando los detalles). Entonces, su código actual sería equivalente a esto:
rating == nil
rating
es un puntero a un objeto NSNumber. Si se compara con == 0
, solo se va a comparar el puntero.
Si desea comparar el valor con 0, deberá obtener el valor real utilizando intValue
, intente;
if ([rating intValue] == 0) {