如何在 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];
我有这个对象:
@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];