Ich habe ein Realm-Objekt namens Restaurant
in meiner App. Dieses Restaurant
Objekt hat viele Table
Objekte, die damit verbunden sind. Wenn ich auf speichern, sieht es wie folgt aus:Überprüfen, ob Realm-Objekt bereits existiert
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];
Nun, was ich will, ist, dass, wenn ein Restaurant hinzugefügt wird, aber es existiert bereits in dieser Konfiguration ist es nicht gespeichert. Aber wenn das gleiche Restaurant hinzugefügt wird, aber etwas ist anders - auch wenn es die Menge der Sitze an 1 Tisch ist - sollte es hinzugefügt werden. Was ist der beste Weg, dies zu erreichen?
Nun, ich weiß über Primärschlüssel und ich dachte über sie nach. * Aber *, der Benutzer kann die Daten eingeben, so dass es mehrere Instanzen eines Restaurants geben kann, in denen nur eine Tabelle geändert wurde. Alle diese sollten gespeichert werden. Es sollte nicht gespeichert werden, wenn es eine 1: 1 Übereinstimmung ist. – user4992124
In diesem Fall möchten Sie wahrscheinlich [query] (https://realm.io/docs/swift/latest/#filtering) in Ihrem Realm für alle Restaurants mit URL, Typ und Anzahl der Tabellen abfragen als das neue 'Restaurant', das du hinzufügen möchtest. Wenn die Ergebnisse dieser Abfrage leer sind, können Sie einfach das neue Modell hinzufügen. Andernfalls können Sie in jedem Ergebnis durch die 'Table's iterieren und auf Gleichheit prüfen (wahrscheinlich wollen Sie' isEqual: 'für diese Klasse außer Kraft setzen); Wenn keines der Ergebnisse identische Tabellen zu Ihrem Modell hat, wissen Sie, dass Sie es hinzufügen können. – AustinZ
Das ist ziemlich ressourcenintensiv, nicht wahr? Ich würde wirklich gerne wissen, ob es keinen besseren Weg gibt. – user4992124