2012-03-14 18 views
36

Domanda veloce: è possibile trasmettere un NSInteger a un oggetto NSNumber? Devo convertire il tag di un oggetto UIImageView in un oggetto NSNumber perché devo passarlo come argomento a una funzione.È possibile trasmettere un NSInteger a NSNumber?

+0

E 'assolutamente possibile dare uno NSInteger a un NSNumber *. Il risultato molto probabilmente porterà ad un incidente. Naturalmente se hai un numero x, puoi usare @ (x) per creare un oggetto NSNumber con il valore x. Che funzionerà, ma non è un cast. – gnasher729

risposta

99

Non è possibile cast perché NSInteger non è un oggetto, solo un alias per un tipo predefinito. È sempre possibile creare un nuovo NSNumber oggetto dal NSInteger, come questo:

NSNumber *myNum = @(myNsIntValue); 

o nella versione precedente del compilatore, usare

NSNumber *myNum = [NSNumber numberWithInteger:myNsIntValue]; 
+1

Questa risposta genera un avviso sui nuovi dispositivi a 64 bit. Per favore vedi la risposta più precisa di Kevin qui sotto. –

+0

@FullDecent Modificato, grazie! – dasblinkenlight

6

Questa è la risposta più corretta e non produrrà inaspettata errore.

NSNumber *myNum = [NSNumber numberWithInteger:myNsIntValue]; 

Poiché il documento detto:

"numberWithInteger:. crea e restituisce un oggetto NSNumber contenente un determinato valore, trattandolo come NSInteger"

"numberWithInt: Crea e restituisce un oggetto NSNumber che contiene un valore dato, trattandolo come int firmato".

15

dal Apple LLVM Compiler 4.0, c'è un modo più semplice per creare NSNumber oggetto:

NSNumber *x = @1234; 
NSNumber *y = @(anIntegerVariable); 
+1

NSNumero * z = @ (aDoubleValue); funziona altrettanto bene. – gnasher729