Я часто сталкиваюсь с парадигмой, где я делю на подклассы что-то, что соответствует NSSecureCoding
, и мне нужно переопределить функции encodeWithCoder:
и initWithCoder:
. Я всегда делал это, как показано ниже, но он никогда не чувствует себя подходящим для доступа к ключевым строкам суперкласса из подкласса. Есть ли лучший способ сделать это?
@interface Foo : NSObject <NSSecureCoding>
@property int p1;
@end
@interface Bar : Foo <NSSecureCoding>
@property int p2;
@end
@implementation Foo
- (instancetype)initWithParam:(int)param1 {
if((self = [super init])) {
_p1 = param1;
}
return self;
}
+ (BOOL)supportsSecureCoding { return YES; }
- (void)encodeWithCoder:(NSCoder *)coder {
[coder encodeInt:[self p1] forKey:@"p1"];
}
- (instancetype)initWithCoder:(NSCoder *)coder {
return [self initWithParam:[coder decodeIntForKey:@"p1"]];
}
@end
@implementation Bar
- (instancetype)initWithParam:(int)param1 otherParam:(int)param2 {
if((self = [super initWithParam:param1])) {
_p2 = param2;
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)coder {
[super encodeWithCoder:coder];
[coder encodeInt:[self p2] forKey:@"p2"];
}
- (instancetype)initWithCoder:(NSCoder *)coder {
return [self initWithParam:[coder decodeIntForKey:@"p1"]
otherParam:[coder decodeIntForKey:@"p2"]];
}
@end
Спасибо:)