我有这个对象:
@interface EasySortDevices : NSObject
@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSString *iconName;
@property (nonatomic) Class deviceObject;
@end
如何编码和解码Class属性deviceObject
?
PS:它无法使用:
- (void)encodeWithCoder:(NSCoder *)aCoder {
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeObject:self.iconName forKey:@"iconName"];
[aCoder encodeObject:self.deviceObject forKey:@"deviceObject"];
}
答案 0 :(得分:1)
deviceObject应该支持NSCoding。因此,要编码自定义对象,您必须为其提供编码和解码方法。
P.S
你编写的编码方法很好,它只需要deviceObject来实现编码和解码。
答案 1 :(得分:0)
限制编码员支持
在某些情况下,类可以实现NSCoding协议,但不支持一种或多种编码器类型。例如,类NSDistantObject,NSInvocation,NSPort及其子类仅采用NSCoding供NSPortCoder在分布式对象系统中使用;它们无法编码到存档中。在这些情况下,类可以测试编码器是否属于特定类型,如果不支持则引发异常。如果限制只是将类限制为顺序存档或键控存档,则可以将消息allowKeyedCoding发送给编码器;否则,你可以测试编码器的类身份。
或者,如果您使用 NSSecureCoding Protocol
进行对象编码和解码NSCoding是一种非常简单方便的方法,可以将模型对象直接转换为文件,然后再将其加载回内存,而无需编写任何文件解析和序列化逻辑,从而在iOS或Mac OS上存储数据。要将任何对象保存到数据文件(假设它实现了NSCoding协议),您可以这样做:
Class * deviceObject = [[Class alloc] init];
[NSKeyedArchiver archiveRootObject:deviceObject toFile:deviceObject];
稍后再加载它:
Class *deviceObject = [NSKeyedUnarchiver unarchiveObjectWithFile:deviceObject];