Si tratta di una questione di integer overflow, come Boris correttamente sottolineato nella sua risposta.
Non so quale sia l'oggetto time
, ma invece di un signed long int
utilizzare uno NSTimeInterval
.
Su iOS NSTimeInterval
è attualmente definito come
typedef double NSTimeInterval;
ma non si dovrebbe preoccuparsi troppo di questo. Attaccare con i sinonimi di tipo ti proteggerà nel caso in cui Apple decida di cambiare la definizione sottostante con qualcos'altro.
Detto questo è necessario modificare il codice a qualcosa come
NSTimeInterval epoch = [time doubleValue];
NSDate * date = [NSDate dateWithTimeIntervalSince1970:epoch];
quanto riguarda la questione del codice manutenibilità ho descritto prima, qui si sta esplicitamente utilizza un doubleValue
(non si dispone di molte opzioni), ma il buon La cosa è che se Apple cambia la definizione di NSTimeInterval
in qualcosa non compatibile con un assegnamento double
, il compilatore ti farà sapere.
fonte
2013-01-02 12:29:09
leggi [questo] (https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html) e [questo] (http://stackoverflow.com/ domande/5739598/setting-date-format-for-nsdateformatter) – tkanzakic