2011-04-29 16 views
7

He visto la función timeIntervalSinceReferenceDate de NSDate. ¿Puedo usar esta función para almacenar el intervalo en el disco y luego devolverlo a NSDate con el mismo valor que el original? Estoy preocupado de que la referencia o intervalo pueda variar entre las máquinas y aparecer de manera diferente en otra computadora.Guardar nsdate en el disco

Respuesta

29

NSDate se puede archivar como una instancia de NSData y NSData se puede escribir/leer fácilmente desde el disco.

// Create and store it 
NSDate * date = [NSDate date]; 
NSData * dateData = [NSKeyedArchiver archivedDataWithRootObject:date]; 
[dateData writeToFile:@"/Some/path/to/file.dat" atomically:NO]; 

// Now bring it back 
NSData * restoredDateData = [NSData dataWithContentsOfFile:@"/Some/path/to/file.dat"]; 
NSDate * restoredDate = [NSKeyedUnarchiver unarchiveObjectWithData:restoredDateData]; 

No se ha realizado ninguna comprobación de error. Hazlo mejor que eso. ;-)

+1

NSKeyedArchiver también puede escribir directamente en un archivo sin NSData. –

+1

+ archiveRootObject: toFile: - true. –

+0

No funciona, dice: - [NSKeyedUnarchiver initForReadingWithData:]: los datos son NULL – Idan

2

Como alternativa, si desea almacenar el resultado de timeIntervalSinceReferenceDate, puede almacenarlo en un NSNumber como un doble y luego guardarlo en el disco utilizando el método NSKeyedArchiver de Joshua.

+0

O simplemente podría escribir los 8 bytes del doble sin molestarse en archivar. – JWWalker

Cuestiones relacionadas