ios - 在 Core Data 中保存一组自定义类
问题描述
我正在尝试将 Core Data 中的一组自定义类保存为可转换属性,但在尝试加载保存的数据时不断出现以下错误:
NSSecureUnarchiveFromData transformer> threw while decoding a value. ({
NSUnderlyingError = "Error Domain=NSCocoaErrorDomain Code=4864 \"value for key 'NS.objects' was of unexpected class 'MyCustomClass'
在核心数据模式中,我将转换器设置为“NSSecureUnarchiveFromData”,将自定义类设置为“NSArray”(因为我想保存一个“MyCustomClass”数组)
MyCustomClass.h
@interface MyCustomClass : NSObject <NSSecureCoding>
@property (nonatomic, assign) NSString *identifier;
我的自定义类.m
@implementation MyCustomClass
+ (BOOL)supportsSecureCoding {
return YES;
}
- (void)encodeWithCoder:(nonnull NSCoder *)coder {
[coder encodeObject:self.identifier forKey:@"Identifier"];
}
- (nullable instancetype)initWithCoder:(nonnull NSCoder *)coder {
if (self = [super init]) {
self.identifier = [coder decodeObjectOfClass:[NSString class] forKey:@"Identifier"];
}
return self;
}
我什至尝试将“MyCustomClass+CoreDataProperties”中的属性声明更改为 NSArray<MyCustomClass *> 但得到了同样的错误。
请问我错过了什么步骤或做错了什么?
解决方案
我错过了几个步骤。除了问题中的代码之外,还必须执行以下操作才能使其正常工作:
• 在模型编辑器中将属性的自定义类更改为 NSArray
• 创建一个名为 MyCustomClassTransformer 的新类:
@interface MyCustomClassTransformer: NSSecureUnarchiveFromDataTransformer {}
@end
@implementation MyCustomClassTransformer
+ (Class)transformedValueClass {
return [MyCustomClassTransformer class];
}
+ (BOOL)allowsReverseTransformation {
return YES;
}
+ (NSArray<Class> *)allowedTopLevelClasses {
return @[[MyCustomClass class], [NSArray class]];
}
@end
• 在 AppDelegate 的“didFinishLaunchingWithOptions”中注册新的转换器:
MyCustomClassTransformer *transformer = [[MyCustomClassTransformer new];
[NSValueTransformer setValueTransformer:transformer forName: @"MyCustomClassTransformer"];
推荐阅读
- angular5 - 动态单选按钮值未以角度 4 提交
- django - 光标 (SQL) - 将网站部署到远程服务器后断开连接
- couchbase - 如何从大型地图沙发库列表中仅查询特定键作为地图列表
- sql - 如何在查询中计算并集的总和
- python - Python:如何通过用户定义的函数拟合曲线?
- java - 录制的音频文件无法播放
- swift - Swift JSONDecoder 处理字典数组的字典
- swift - 无法将类型“[NSManagedObject]”的值转换为预期的参数类型“NSManagedObject”
- binary-tree - 二叉树归纳示例
- css - 如何使用材料设计使 div 浮动在页面右侧(贴)