2011-02-01 13 views
6

Tengo un NSTimeInterval y tengo un valor de JSON 1257808000000.NSTimeInterval -> tipos de puntero incompatibles

hago esto:

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

Pero consigo esta advertencia:

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

¿Cómo puedo solucionar este problema?

Atentamente.

Respuesta

16

NSTimeInterval es en realidad un valor doble. No es un objeto

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

buena llamada. Creo que muchas personas no parecen entender lo que hace el asterisco. Solo aprendí recientemente. Aunque creo que tendrá que hacer un análisis especial si su valor JSON es solo un número grande como el ejemplo que publicó. –

+0

objectForKey es un método dictinoario que devuelve una identificación, no se puede convertir así. –

+1

@Oleg Danu, puede que tenga razón, pero creo que esto funcionará, ya que el valor de retorno debería ser un NSString o NSNumber y ambos responden a doubleValue. ¿Has probado que esto no está funcionando? – taskinoor

-4

Trate

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

-1 lo siento, NSTimeInterval es un objeto doble, no objc - el lanzamiento de un 'id' como' doble * 'no realiza ninguna conversión de tipo. – justin

+0

-1, no solo eso, @Oleg acaba de crear un puntero a un 'doble', que si lo sigue hasta su conclusión lógica es inequívocamente' comportamiento indefinido' según la especificación del lenguaje C [89] 9 ya que está muy escriba claramente el juego de palabras a través de un puntero. – johne

1

si el objeto de clave @"thetimestamp" es un NSString o NSNumber continuación

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

su primer ejemplo (NSString) es incorrecto. el segundo ejemplo (NSNumber) es correcto, suponiendo que por supuesto 'objectForKey:' devuelve un 'NSNumber' o' NSString'. el segundo funcionará para NSNumber, y para NSString cuando la cadena realmente representa un número (docs detalla por qué/cómo '- [NSString doubleValue]' puede fallar). – justin

+0

@Justin: ¡por supuesto! actualizado la respuesta. –

Cuestiones relacionadas