objective-c json nsnumber

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.



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) {