2012-01-19 15 views
5

Estoy trabajando en iOS 4.3 & iOS 5 con recuento automático de referencias. Declaro un objeto NSDate en mi interfaz:NSDate convirtiéndose en NSNumber MYSTERY

NSDate *fingerprintsDate; 

Más tarde, puse que NSDate - utilizando el depurador y entrar a través de él tiene el valor que cabe esperar:

fingerprintsDate = [NSDate date]; 

Por último, trato de llegar el momento de la fecha:

if (fingerprintsDate == nil || [fingerprintsDate timeIntervalSinceNow] > 6) 

Y ahí es donde se estrella con el selector no reconocido: "2012-01-18 23: 07: 46.662 Netapporter [473: 707] - [NSCFNumber timeIntervalSinceNow]: selector no reconocido enviado a ejemplo 0x194490"

De acuerdo con el depurador, querida NSDate lee: "fingerprintsDate = (NSCFNumber *) 0x194490 139" - cuando imprimo descripción se lee: "value = {139,0000000000, type = kCFNumberFloat32Type}"

No estoy haciendo nada más con las huellas dactilares en otro lugar del código, pero de alguna manera se está convirtiendo en un NSNumer ... ¿Alguna idea de cómo detenerlo?

+1

Debe haber algún otro código "intermedio" que lo esté haciendo (es decir, escribir sobre su fecha). ¿Podrías publicar un código más? – dasblinkenlight

+0

¿Por qué verificar si la fecha es nula o superior a 6? Compruébelo con esto para mí: if ([[myNum className] isEqualToString: @ "NSCFNumber"]) {NSLog: (@ "es el número)} – CodaFi

+0

No hay problema con el código que se muestra aquí, pero después de leer el error informe podría ser que está tratando de utilizar el valor de retorno del método "timeIntervalSinceNow" en el lugar equivocado (parámetro), en realidad "- (NSTimeInterval) timeIntervalSinceNow" devolver el valor flotante – kulss

Respuesta

0

[NSDate date] devuelve un valor no retenido (o débil si usa arc), por lo que es muy probable que se haya liberado en algún lugar entre esa asignación y la llamada [fingerprintsDate timeIntervalSinceNow]. Cuando lo asigna a una propiedad retenida (fuerte), se conserva.

+0

ARC predetermina los locales a fuerte. No creo que sea eso. –

0

¿Está depurando con GBD, compilando con GCC? Podría estar relacionado con mi pregunta: -[NSDate timeIntervalSinceDate:] returns very small number on GCC 4.2, but works as expected on LLVM-GCC 4.2 on iOS4.3 Simulator

+0

¿Y cómo eso explicaría '[fingerprintsDate timeIntervalSinceNow]' bloqueando con un reclamo que 'figerprintsDate' es un NSNumber y no un NSDate? – matt

+0

No lo hace directamente. Es solo otro comportamiento extraño que vi con API similares en iOS4.3. –