@interface Info : NSObject <NSSecureCoding>
@property (nonatomic) int infoId;
@end
@implementation Info
+ (BOOL)supportsSecureCoding {
return YES;
}
- (void)encodeWithCoder:(NSCoder *)coder {
[coder encodeInt:self.infoId
forKey:@"infoId"];
}
- (instancetype)initWithCoder:
(NSCoder *)coder {
self = [super init];
if (self) {
_infoId = [coder
decodeIntForKey:@"infoId"];
}
return self;
}
@end
@interface Data : NSObject <NSSecureCoding>
@property (nonatomic) NSString *text;
@property (nonatomic) Info *info;
@end
@implementation Data
+ (BOOL)supportsSecureCoding {
return YES;
}
//the nested object encodes itself
- (void)encodeWithCoder:(NSCoder *)coder {
[coder encodeObject:self.text
forKey:@"text"];
[coder encodeObject:self.info
forKey:@"info"];
}
- (instancetype)initWithCoder:
(NSCoder *)coder {
self = [super init];
if (self) {
_text = [coder
decodeObjectOfClass:[NSString class]
forKey:@"text"];
_info = [coder
decodeObjectOfClass:[Info class]
forKey:@"info"];
}
return self;
}
@end
Data *data = [Data new];
data.text = @"Hello";
data.info = [Info new];
data.info.infoId = 1;
NSData *bin = [NSKeyedArchiver
archivedDataWithRootObject:data
requiringSecureCoding:YES
error:nil];