2012-05-18 16 views
12

sul seguente codice in cui viene visualizzato il messaggio errato: La conversione implicita di "int" in "NSNumber *" non è consentita con ARC.iOS La conversione implicita di int in NSNumber non è consentita con ARC

Cosa sto facendo male?

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

Grazie per qualsiasi aiuto o suggerimento!

saluti, Daniel

risposta

14

Si dovrebbe usare [success intValue] == 1. Un NSNumber è una classe, quindi il numero è un puntatore, non il valore diretto.

+0

Grazie! È stato risolto. – Raja

25

Erro perché si stanno confrontando con NSNumberint.

Prova come -

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

o

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

Il primo confronto è sbagliato, si sta confrontando puntatore valori di oggetti distinti. Vorresti '[successo èEqual: [NSNumber numberWithInt: 1]]' o meglio ancora, il secondo confronto. – DarkDust

+0

Grazie per averlo indicato, lo modificherò. – rishi

3

NSNumber è un oggetto (ad esempio un puntatore), quindi non è possibile confrontarlo con un numero intero come 1. Invece è necessario estrarre il valore int dall'oggetto numero:

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

Se success dovrebbe indicare un valore booleano, si consiglia di provare questo

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

if ([success boolValue]) { 
    // success! 
} 
Problemi correlati