2012-01-19 14 views
5

Sto lavorando in iOS 4.3 & iOS 5 con conteggio automatico dei riferimenti. Dichiaro di un oggetto NSDate nella mia interfaccia:NSDato che si trasforma in NSNumber MYSTERY

NSDate *fingerprintsDate; 

Più tardi, ho impostato che NSDate - utilizzando il debugger e intensificare attraverso di essa ha il valore che ci si aspetta:

fingerprintsDate = [NSDate date]; 

Infine, cerco di ottenere il tempo a partire dalla data:

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

ed è lì che si blocca con selettore non riconosciuta: "2012-01-18 23: 07: 46,662 Netapporter [473: 707] - [NSCFNumber timeIntervalSinceNow]: selettore non riconosciuto inviato a esempio 0x194490"

Secondo il debugger, mia cara NSDate legge: "fingerprintsDate = (NSCFNumber *) 0x194490 139" - quando stampo descrizione si legge: "{value = 139,0 miliardi, type = kCFNumberFloat32Type}"

Non sto facendo nient'altro con impronte digitali in nessun altro posto nel codice, ma in qualche modo si sta trasformando in un NSNumer ... Qualche idea su come fermarlo?

+1

Ci deve essere qualche altro codice "in mezzo" che lo sta facendo (vale a dire, scrivere oltre la data). Potresti postare qualche altro codice? – dasblinkenlight

+0

Perché dovresti controllare se la data è pari o superiore a 6? Controllalo per me: if ([[myNum className] isEqualToString: @ "NSCFNumber"]) {NSLog: (@ "è numero)} – CodaFi

+0

Non c'è alcun problema con il codice mostrato qui, ma dopo aver letto il bug potrebbe essere che stai cercando di usare il valore di ritorno del metodo "timeIntervalSinceNow" nella posizione sbagliata (parametro), in realtà "- (NSTimeInterval) timeIntervalSinceNow" restituisce il valore float. – kulss

risposta

0

[Data datata NS] restituisce un valore non mantenuto (o debole se si utilizza arco), quindi è probabile che sia stato rilasciato da qualche parte tra tale incarico e chiamando [fingerprintsDate timeIntervalSinceNow]. Quando lo assegni a una proprietà mantenuta (forte), viene mantenuta.

+0

L'ARC imposta le persone locali su forte. Non penso sia così. –

0

Stai eseguendo il debug con GBD, compilando con GCC? Potrebbe essere correlato alla mia domanda: -[NSDate timeIntervalSinceDate:] returns very small number on GCC 4.2, but works as expected on LLVM-GCC 4.2 on iOS4.3 Simulator

+0

E come spiegherebbe '[fingerprintsDate timeIntervalSinceNow]' andando in crash con un reclamo che 'figerprintsDate' è un NSNumber e non un NSDate? – matt

+0

Non direttamente. È solo un altro strano comportamento che ho visto con API simili su iOS4.3. –