假设我有一个这样的模型:
#import <Mantle/Mantle.h>
#import "MyCustomObject.h"
@interface MyModel : MTLModel <MTLJSONSerializing>
@property (nonatomic, copy, readonly) NSString *UUID;
@property (nonatomic, copy) NSString *someProp;
@property (nonatomic, copy) MyCustomObject *anotherProp;
@end
#import "MyModel.h"
@implementation MyModel
+ (NSDictionary *)JSONKeyPathsByPropertyKey
{
return @{
@"UUID": @"id",
@"anotherProp": NSNull.null
};
}
}
@end
如您所见,我想在NSCoding序列化期间忽略
anotherProp
,以及将“ UUID”重新映射为“ id”。使用YapDatabase,我可以[transaction setObject:myModelObj forKey:@"key_1" inCollection:@"my_collection"]
但尽管使用了我的自定义
anotherProp
方法,它仍尝试序列化JSONKeyPathsByPropertyKey
,导致此错误:*** Caught exception encoding value for key "anotherProp" on class MyModel: -[YapDatabase encodeWithCoder:]: unrecognized selector sent to instance 0xc989630
我是否需要编写自定义序列化程序以使YapDatabase使用
JSONKeyPathsByPropertyKey
? 最佳答案
您需要配置YapDatabase以使用Mantle。默认情况下,它将使用NSCoding。 (这就是为什么您看到有关“ encodeWithCoder:”的错误的原因,因为该方法是NSCoding的一部分。)
看一下YapDatabase的Wiki文章“存储对象”,其中讨论了它如何使用序列化器/解串器块:
https://github.com/yaptv/YapDatabase/wiki/Storing-Objects
基本上,当您分配/初始化YapDatabase实例时,您将希望传递一个使用Mantle来执行序列化/反序列化的序列化器和反序列化器块。
另外,请参见可用于YapDatabase的各种初始化方法:
https://github.com/yaptv/YapDatabase/blob/master/YapDatabase/YapDatabase.h