gpt4 book ai didi

ios - 如何让 YapDatabase 和 Mantle 很好地处理序列化

转载 作者:行者123 更新时间:2023-11-28 22:06:31 29 4
gpt4 key购买 nike

假设我有这样一个模型:

#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 文章,其中讨论了它如何使用序列化器/反序列化器 block : https://github.com/yaptv/YapDatabase/wiki/Storing-Objects

基本上,当您分配/初始化 YapDatabase 实例时,您需要传递一个使用 Mantle 执行序列化/反序列化的序列化器和反序列化器 block 。

此外,请参阅 YapDatabase 可用的各种初始化方法: https://github.com/yaptv/YapDatabase/blob/master/YapDatabase/YapDatabase.h

关于ios - 如何让 YapDatabase 和 Mantle 很好地处理序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23838235/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com