gpt4 book ai didi

objective-c - 检查 Realm 对象是否已经存在

转载 作者:太空狗 更新时间:2023-10-30 03:44:28 24 4
gpt4 key购买 nike

我的应用程序中有一个名为 Restaurant 的 Realm 对象。这个 Restaurant 对象有很多 Table 对象连接到它。如果我继续保存,它看起来像这样:

Restaurant *restaurant = [[Restaurant alloc] init];
restaurant.url = [_userData url];
restaurant.type = [_userData kind];

for (int i = 0; i < [[_userData tables] count]; i++) {
Input *input = [[_userData tables] objectAtIndex:i];
Table *table = [[Table alloc] init];

table.title = input.title;
table.seats = input.seats;
table.type = input.type;

[restaurant.tables addObject:table];
}

RLMRealmConfiguration *config = [RLMRealmConfiguration defaultConfiguration];
config.fileURL = [NSURL URLWithString:[Preferences getRealmPath]];
RLMRealm *realm = [RLMRealm realmWithConfiguration:config error:nil];

[realm beginWriteTransaction];
[realm addObject:restaurant];
[realm commitWriteTransaction];

现在,我想要的是,当添加了一家餐馆,但它已经存在于该配置中时,它不会被存储。但是,当添加同一家餐厅,但某事不同时 - 即使是一张 table 的座位数量 - 也应该添加。实现这一目标的最佳方法是什么?

最佳答案

Realm 支持一个叫做 primary keys 的东西,这似乎很适合您的问题。

主键是 Realm 对象的唯一标识符;它可以是整数或字符串。在您的情况下,您可以使用 URL 作为主键(如果每个餐厅确实只与一个 URL 相关联),或者添加一个新属性作为主键(可能是 name 字段) .

然后您可以使用 addOrUpdateObject: 方法代替 addObject: 方法。此方法仅适用于具有主键的对象类型。

在您的情况下,假设您为 Restaurant 模型类型设置了主键,Realm 将执行以下操作之一:

  • 如果 Restaurant 之前被添加到 Realm 并且相对于您的新模型没有改变,则什么都不会改变。
  • 如果 Restaurant 之前被添加到 Realm 但您的模型已经更改,则 Realm 中的现有模型将被更新。
  • 如果 Restaurant 之前未添加到 Realm,则会添加它。

希望对您有所帮助。

关于objective-c - 检查 Realm 对象是否已经存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38687204/

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