我有一个MyCustomClass
具有四种不同类型属性的类对象:
@property (nonatomic, assign) double someDouble;
@property (nonatomic, assign) NSInteger someInteger;
@property (nonatomic, retain) NSColor* someColor;
@property (nonatomic, retain) NSData* someData;
我采用了 NSSecureCoding 并对我的课程进行编码:
-(void)encodeWithCoder:(NSCoder *)encoder;
{
for (NSString* key in [self propertyKeys])
[encoder encodeObject:[self valueForKey:key] forKey:key];
}
-(NSArray *)propertyKeys
{
return [NSArray arrayWithObjects:@"someDouble", @"someInteger", @"someColor", @"someData", nil];
}
然后我解码它:
-(id)initWithCoder:(NSCoder *)decoder
{
if (self = [self init])
{
for (NSString* key in [self propertyKeys])
{
if ([decoder containsValueForKey:key])
{
id object = [decoder decodeObjectOfClasses:[self allowedClasses] forKey:key];
[self setValue:object forKey:key];
}
}
}
return (self);
}
-(NSSet *)allowedClasses
{
return ([NSSet setWithObjects:[NSColor class], nil]);
}
所以:
为什么我只需要NSColor
在我允许的课程中?尽管我没有添加 NSData 或 NSNumber,但所有这些代码都有效,因为我假设 KVC 正在处理将原始类型(NSInteger 和 double)转换为 NSNumber。