Objective c NSDateComponents如何存储到NSUserDefaults中?

Objective c NSDateComponents如何存储到NSUserDefaults中?,objective-c,ios,Objective C,Ios,我想将NSDateComponents存储到NSUserDefaults,因此需要先将其包装到NSData中,如何才能做到这一点 或者,是否有另一种将NSDATE组件存储为用户默认值的方法?NSDATE组件符合NSCoding协议,因此您可以使用NSKeyedArchiver/NSKEYEDANACHIVER来完成此项工作。以下是一些示例代码: NSDateComponents *cmp = ...; //Encoding NSMutableData *data= [NSMutableData

我想将NSDateComponents存储到NSUserDefaults,因此需要先将其包装到NSData中,如何才能做到这一点


或者,是否有另一种将NSDATE组件存储为用户默认值的方法?

NSDATE组件
符合
NSCoding
协议,因此您可以使用
NSKeyedArchiver
/
NSKEYEDANACHIVER
来完成此项工作。以下是一些示例代码:

NSDateComponents *cmp = ...;
//Encoding
NSMutableData *data= [NSMutableData data];

NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];

[archiver encodeObject:cmp];
[archiver finishEncoding];

//Decoding
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];

NSDateComponents *decoded = [unarchiver decodeObject];

[unarchiver finishDecoding];

通过使用类方法
archivedDataWithRootObject:
unarchiveObjectWithData:
,可以用更少的代码实现这一点。