NSCalendarUnit
是一个无符号长,所以使用上NSNumber
两种方法用于无符号多头可以“盒装”(制作成一个对象):
NSCalendarUnit someNSCalendarUnit = NSCalendarUnitDay;
NSNumber *boxed = [NSNumber numberWithUnsignedLong:someNSCalendarUnit];
和
NSCalendarUnit unboxed = [boxed unsignedLongLongValue];
// now, unboxed == someNSCalendarUnit
而且你可能知道如何编码一个解码NSNumbers,只需在编码/解码方法中添加额外的盒步...
- (void)encodeWithCoder:(NSCoder*)encoder {
[super encodeWithCoder:encoder];
NSNumber *boxed = [NSNumber numberWithUnsignedLong:self.someNSCalendarUnit];
[encoder encodeObject:boxed forKey:@"someNSCalendarUnit"];
// ...
}
- (id)initWithCoder:(NSCoder*)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
NSNumber *boxed = [aDecoder decodeObjectForKey:@"someNSCalendarUnit"];
_someNSCalendarUnit = [boxed unsignedLongLongValue];
// ...
}
return self;
}