2012-05-18 6 views
12

en el siguiente código me sale el mensaje de error: La conversión implícita de 'int' a 'NSNumber *' no se permite con ARC.iOS La conversión implícita de int a NSNumber no está permitida con ARC

¿Qué estoy haciendo mal?

<pre> 
<code> 
    NSDictionary *results = [jsonstring JSONValue]; 
    NSNumber *success = [results objectForKey:@"success"]; // possible values for "success": 0 or 1 

    if (success == 1) { // ERROR implicit conversion of int to NSNumber disallowed with ARC  
    } 
</code> 
</pre> 

¡Gracias por cualquier ayuda o sugerencia!

respecto, Daniel

Respuesta

14

Debe utilizar [success intValue] == 1. Un NSNumber es una clase, por lo que el número es un puntero, no el valor directo.

+0

¡Gracias! Funcionó. – Raja

25

Erro porque se están comparando con NSNumberint.

Trate como -

if ([success isEqual:[NSNumber numberWithInt:1]]) 

o

if ([success intValue] == 1) 
+1

La primera comparación es incorrecta, estás comparando puntero valores de objetos distintos Querrías '[success isEqual: [NSNumber numberWithInt: 1]]' o mejor aún, la segunda comparación. – DarkDust

+0

Gracias por señalarlo, voy a editar esto. – rishi

3

NSNumber es un objeto (es decir, un puntero), por lo que no puede simplemente compararlo con un literal entero como 1. En su lugar tiene que extraer el valor del objeto int número:

if ([success intValue] == 1) { 
    ... 
} 
1

Si success debe indicar un valor lógico, es posible que desee probar este

NSDictionary *results = [jsonstring JSONValue]; 
NSNumber *success = [results objectForKey:@"success"]; 

if ([success boolValue]) { 
    // success! 
} 
Cuestiones relacionadas