在 Core Data 中保存一组自定义类
Posted
技术标签:
【中文标题】在 Core Data 中保存一组自定义类【英文标题】:Saving an array of custom classes in Core Data 【发布时间】:2021-01-08 12:18:04 【问题描述】:我正在尝试将 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;
MyCustomClass.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
请问我遗漏了哪一步或做错了什么?
【问题讨论】:
【参考方案1】:我错过了几个步骤。除了问题中的代码之外,还必须执行以下操作才能使其正常工作:
• 将模型编辑器中属性的自定义类更改为 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"];
【讨论】:
以上是关于在 Core Data 中保存一组自定义类的主要内容,如果未能解决你的问题,请参考以下文章