2011-02-01 17 views
6

Ho un NSTimeInterval e ho un valore JSON 1257808000000.NSTimeInterval -> tipi di puntatori incompatibili

faccio questo:

NSTimeInterval *myTimestamp = [myJSON objectForKey:@"thetimestamp"]; 

Ma ottengo questo avvertimento:

Incompatible pointer types initializing 'NSTimeInterval *' (aka 'double *') 
with an expression of type 'id' 

Come posso risolvere questo problema?

I migliori saluti.

risposta

16

NSTimeInterval è in realtà un doppio valore. Non è un oggetto.

NSTimeInterval myTimestamp = [[myJSON objectForKey:@"thetimestamp"] doubleValue]; 
+0

buona chiamata. Penso che molte persone non sembrano capire cosa fa l'asterisco. Ho imparato solo di recente. Anche se penso che dovrà fare un po 'di analisi speciale se il suo valore JSON è solo un numero grande come nell'esempio che ha pubblicato. –

+0

objectForKey è un metodo dictinoary che restituisce un id, non è possibile convertirlo in questo modo. –

+1

@Oleg Danu, potresti avere ragione ma penso che funzionerà in realtà poiché il valore restituito dovrebbe essere un NSString o NSNumber ed entrambi rispondono a doubleValue. hai provato che questo non funziona? – taskinoor

-4

Prova

NSTimeInterval *myTimestamp = (NSTimeInterval*)[myJSON objectForKey:@"thetimestamp"]; 
+0

-1 scusa, NSTimeInterval è un oggetto doppio, non objc: il cast di un 'id' come 'double *' non esegue alcuna conversione di tipo. – justin

+0

-1 non solo, @Oleg ha appena creato un puntatore a un 'double', che se lo si segue fino alla sua conclusione logica è univocamente' comportamento indefinito' secondo le specifiche del linguaggio C [89] 9 come si è molto digitare chiaramente la punzione attraverso un puntatore. – johne

1

se l'oggetto per la chiave @"thetimestamp" è un NSString o NSNumber poi

NSTimeInterval myTimestamp = [[myJSON objectForKey:@"thetimestamp"] doubleValue]; 
+0

il tuo primo esempio (NSString) è sbagliato. il secondo esempio (NSNumber) ha ragione, assumendo naturalmente 'objectForKey:' restituisce un 'NSNumber' o' NSString'. il secondo funzionerà per NSNumber e per NSString quando la stringa rappresenta effettivamente un numero (i dettagli del documento perché/come '- [NSString doubleValue]' potrebbe non riuscire). – justin

+0

@Justin: certo! aggiornato la risposta. –

Problemi correlati