gpt4 book ai didi

ios - Realm.io - 如何在使用来自服务器的响应数据时使用 defaultPropertyValues?

转载 作者:行者123 更新时间:2023-11-28 21:47:02 24 4
gpt4 key购买 nike

我知道我们必须使用 defaultPropertyValues。类结构:

@interface Event : RLMObject
@property (nonatomic, copy) NSString *roomName;
....
- (instancetype)initWithAttributes:(NSDictionary *)attributes;

@end

@implementation Event

+ (NSDictionary *)defaultPropertyValues {
return @{@"roomName" : @""};
}

- (instancetype)initWithAttributes:(NSDictionary *)attributes {
self = [super init];
if (self) {
self.roomName = [attributes valueForKeyPath:@"room"];
.......
}
return self;
}

...

Event *school = [[IVEvent alloc] initWithAttributes:dict];
[realm addObject:school];

“RLMException”,原因:“没有为‘Event’中的属性‘roomName’指定值或默认值”

这是因为 roomName 是由 defaultPropertyValues 类方法分配的。但是一旦从属性字典中解析出来,roomName 就会变成 nil 并崩溃。有没有更好的方法来处理这个问题?我不想在 [attributes valueForKeyPath:@"room"] 上放置 if 条件

最佳答案

您可以使用 Realm 的内置方法将 NSDictionaries 映射到 RLMObjects createOrUpdateInRealm:withObject:在您的实体类 (Event) 而不是自定义初始化程序上。如文档所述,当没有给出值时,这将退回到使用默认值:

The object used to populate the object. This can be any key/value coding compliant object, or a JSON object such as those returned from the methods in NSJSONSerialization, or an NSArray with one object for each persisted property. An exception will be thrown if any required properties are not present and no default is set.

否则,您需要确保在您的自定义初始化程序中,您不会用 nil 值覆盖属性。如果您有一个自定义映射,其中属性名称不同并且您的服务器响应是 JSON 格式,那么对象映射库如 Realm-JSON您可能会感兴趣。

关于ios - Realm.io - 如何在使用来自服务器的响应数据时使用 defaultPropertyValues?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29718230/

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