2011-04-29 2 views
7

timeIntervalSinceReferenceDate 기능을 NSDate으로 보았습니다. 이 함수를 사용하여 간격을 디스크에 저장 한 다음 원래 값과 동일한 값으로 NSDate으로 되돌릴 수 있습니까? 참조 또는 간격이 컴퓨터마다 다를 수 있으며 다른 컴퓨터에서 다르게 나타날 수 있습니다.디스크에 nsdate 저장

답변

29

NSDate는 NSData 인스턴스로 보관할 수 있으며 NSData는 디스크에 쉽게 쓰거나 읽을 수 있습니다.

// 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]; 

오류 검사가 수행되지 않습니다. 그보다 잘 수행하십시오. ;-)

+1

NSKeyedArchiver는 NSData없이 파일에 직접 쓸 수도 있습니다. –

+1

+ archiveRootObject : toFile : true입니다. –

+0

작동하지 않습니다, 그것은 말합니다 : - [NSKeyedUnarchiver initForReadingWithData :] : 데이터가 NULL입니다 – Idan

2

timeIntervalSinceReferenceDate의 결과를 저장하려면 NSNumber에 이중으로 저장 한 다음 Joshua의 NSKeyedArchiver 메서드를 사용하여 디스크에 저장할 수 있습니다.

+0

또는 보관 처리를하지 않고도 8 바이트의 이중 바이트를 쓸 수 있습니다. – JWWalker