- initWithCoder: 当-decodeObjectOfClass:forKey: returns 无
- initWithCoder: when -decodeObjectOfClass:forKey: returns nil
我想知道当给定的 属性 编码时 nil
如何使用 NSSecureCoding
。举个例子:
- (instancetype)initWithCoder:(NSCoder *)aDecoder
{
self = [super init];
if (self) {
_buffer = [aDecoder decodeObjectOfClass:[NSMutableData class] forKey:@"buffer"];
if (_buffer == nil) {
self = nil;
}
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder setValue:_buffer forKey:@"buffer"];
}
我养成了每当分配失败时将 self
设置为 nil
的习惯,因为这似乎是一个正确的模式。但是,在这种情况下,如果 _buffer
在编码时是 nil
,我如何在解码时从分配失败中判断出来?
我不确定你在这里尝试处理的模式,但我怀疑直接在编码器上使用 setValue:
很奇怪。我只使用过,也只见过 encode<SomeThing>: forKey:
语法。从我所看到的情况来看,尝试解码同一个密钥将导致输出错误。
但是您是说您想要区分实际为空的结果解码和您选择 return 空值的失败状态?我仍然不确定你为什么要这样处理它,但唯一的区分方法是选择一个不同的值来存储,比如 "The Buffer has a nil value" 然后在解码时检查该字符串,或者将第二个键存储在您要检查的编码器:
if(_buffer == nil){
[aCoder encodeBool: true forKey: @"wasBufferNull"];
}
你问这个问题已经有一段时间了。但如果其他人仍然有兴趣找到解决方案……
对于 NSData
/ NSMutableData
,关于如何区分 decodeObjectOfClass:forKey:
返回的 nil
是否是 isKindOfClass:
检查失败的结果的一种想法,与在 encodeWithCoder:
期间是否实际上是 nil
相比,如果在编码期间确实是 nil
,则可以编码 [NSData data]
。
例如:
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:_buffer ?: [NSMutableData data] forKey:@"buffer"];
}
我想知道当给定的 属性 编码时 nil
如何使用 NSSecureCoding
。举个例子:
- (instancetype)initWithCoder:(NSCoder *)aDecoder
{
self = [super init];
if (self) {
_buffer = [aDecoder decodeObjectOfClass:[NSMutableData class] forKey:@"buffer"];
if (_buffer == nil) {
self = nil;
}
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder setValue:_buffer forKey:@"buffer"];
}
我养成了每当分配失败时将 self
设置为 nil
的习惯,因为这似乎是一个正确的模式。但是,在这种情况下,如果 _buffer
在编码时是 nil
,我如何在解码时从分配失败中判断出来?
我不确定你在这里尝试处理的模式,但我怀疑直接在编码器上使用 setValue:
很奇怪。我只使用过,也只见过 encode<SomeThing>: forKey:
语法。从我所看到的情况来看,尝试解码同一个密钥将导致输出错误。
但是您是说您想要区分实际为空的结果解码和您选择 return 空值的失败状态?我仍然不确定你为什么要这样处理它,但唯一的区分方法是选择一个不同的值来存储,比如 "The Buffer has a nil value" 然后在解码时检查该字符串,或者将第二个键存储在您要检查的编码器:
if(_buffer == nil){
[aCoder encodeBool: true forKey: @"wasBufferNull"];
}
你问这个问题已经有一段时间了。但如果其他人仍然有兴趣找到解决方案……
对于 NSData
/ NSMutableData
,关于如何区分 decodeObjectOfClass:forKey:
返回的 nil
是否是 isKindOfClass:
检查失败的结果的一种想法,与在 encodeWithCoder:
期间是否实际上是 nil
相比,如果在编码期间确实是 nil
,则可以编码 [NSData data]
。
例如:
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:_buffer ?: [NSMutableData data] forKey:@"buffer"];
}