如何在 objective C 中编码和解码 Class 类型的对象?

How can you encode and decode Class type object in objective C?

我有这个对象:

@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"];
}

deviceObject 应该支持 NSCoding。因此,要对自定义对象进行编码,您必须为其提供编码和解码方法。
P.S 你写的encode方法不错,只需要那个deviceObject也能实现encode和decode。

限制编码器支持

关注这个苹果link:- https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Archiving/Articles/codingobjects.html

在某些情况下,class 可以实现 NSCoding 协议,但不支持一种或多种编码器类型。例如,classes NSDistantObject、NSInvocation、NSPort 及其子classes 采用 NSCoding 仅供分布式对象系统中的 NSPortCoder 使用;它们不能被编码到档案中。在这些情况下,class 可以测试编码器是否属于特定类型,如果不支持则引发异常。如果限制只是将class限制为顺序或键控归档,则可以向编码器发送消息allowsKeyedCoding;否则,您可以测试 class 编码器的身份。

或者,如果您使用 NSSecureCoding 协议

的对象编码和解码

NSCoding 是在 iOS 或 Mac OS 上存储数据的一种非常简单方便的方法,方法是将模型对象直接转换为文件,然后再次将其加载回内存,无需编写任何文件解析和序列化逻辑。要将任何对象保存到数据文件(假设它实现了 NSCoding 协议),你可以这样做:

Class * deviceObject = [[Class alloc] init];
[NSKeyedArchiver archiveRootObject:deviceObject toFile:deviceObject];

稍后再加载:

Class *deviceObject = [NSKeyedUnarchiver unarchiveObjectWithFile:deviceObject];