私はRestaurant
というRealmオブジェクトを私のアプリケーションに持っています。このRestaurant
オブジェクトには、Table
オブジェクトが多数接続されています。私が保存した場合、それは次のようになります。今Realmオブジェクトが既に存在するかどうかをチェック
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];
、私が欲しいのレストランを追加しましたが、それはすでにその構成に存在しているとき、それは保存されていないということです。しかし、同じレストランを追加したときに、何かが違う - たとえそれが1テーブルの座席の量であっても、追加する必要があります。これを達成する最良の方法は何ですか?
私は主キーについて知っていて、私はそれらを考えました。 *しかし*、ユーザーはデータを入力できるので、テーブルのみが変更されたレストランのインスタンスが複数存在する可能性があります。これらはすべて保存する必要があります。それは完全な1対1のマッチであるときには格納しないでください。 – user4992124
その場合、URL、タイプ、およびテーブルの数を持つすべての 'Restaurant'のレルムで[クエリ](https://realm.io/docs/swift/latest/#filtering)したいと思うでしょうあなたが追加したい新しい「レストラン」として。そのクエリの 'Results'が空の場合、新しいモデルを追加するだけです。それ以外の場合は、各結果の 'Table'を繰り返し処理し、等価性をチェックすることができます(おそらく、そのクラスの' isEqual: 'をオーバーライドする必要があります)。結果がモデルと同一のテーブルを持たない場合は、追加することができます。 – AustinZ
それはかなりリソース集中です、そうではありません。もっと良い方法がないかどうか本当に知りたいです。 – user4992124