检查Realm对象是否已经存在

use*_*124 6 objective-c realm

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];
Run Code Online (Sandbox Code Playgroud)

现在,我想要的是当添加餐厅时,但该餐厅已经存在于该配置中,因此不存储它。但是,如果添加了同一家餐厅,但是有所不同(即使是一张桌子的座位数),也应该添加。实现此目标的最佳方法是什么?

Aus*_*inZ 4

Realm 支持称为主键的东西,这似乎很适合您的问题。

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

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

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

  • 如果Restaurant先前已添加到领域并且相对于您的新模型没有更改,则不会发生任何变化。
  • 如果Restaurant之前已将其添加到 Realm,但您的模型后来发生了更改,则 Realm 中的现有模型将被更新。
  • 如果Restaurant之前未将其添加到领域,则会添加它。

希望有帮助。