Behandlung doppelter Einträge in Core Data

8

Ich habe eine App, mit der Benutzer Favoriten speichern können. Ich verwende Core Data, um die Favoriten als verwaltete Objekte zu speichern. Ich habe Code geschrieben, um die Möglichkeit zu vermeiden, Duplikate zu speichern, aber ich frage mich, ob es einen besseren Weg gibt, dies zu tun. Jedes Lieblingsobjekt hat ein ID-Feld, das eindeutig ist. Im folgenden Code werde ich einfach das ID-Feld durchlaufen und prüfen, und wenn der Wert bereits existiert, einen Flag-Wert auf "true" setzen und aus der Schleife ausbrechen.

%Vor%

Ich habe mich gefragt, ob Core Data prüfen kann, ob ein hinzugefügtes Objekt ein Duplikat ist. Gibt es ein Prädikat, mit dem Duplikate überprüft werden können? Danke!

    
Pheepster 15.08.2013, 21:15
quelle

6 Antworten

15

CoreData führt kein Alleinstellungsmerkmal aus. Es hat keine Ahnung, dass zwei Einträge identisch sind.

Um ein solches Verhalten zu ermöglichen, müssen Sie es selbst implementieren, indem Sie eine 'Suche vor dem Einfügen' aka 'Fetch vor dem Erstellen' durchführen.

%Vor%

Denken Sie daran, dass dies einen Single-Thread-Zugriff voraussetzt

    
Daij-Djan 15.08.2013, 22:49
quelle
4
  

Ich habe mich gefragt, ob Core Data prüfen kann, ob ein hinzugefügtes Objekt ein Duplikat ist.

Nein, Core Data kümmert sich nicht darum.

  

Gibt es ein Prädikat, das die Prüfung auf Duplikate verarbeiten kann?

Da Ihre Objekte eindeutige IDs haben, die Sie steuern, führen Sie einen Abruf für einen vorhandenen Favoriten mit dieser ID durch. Etwas wie

%Vor%

Wenn Sie irgendwelche Ergebnisse erhalten, wissen Sie, dass ein Favorit mit dieser ID bereits existiert. Und Sie haben einen Bezug auf diesen Favoriten, falls Sie ihn ändern möchten.

Ihr aktueller Ansatz ist in Ordnung und wahrscheinlich schneller, wenn es nur wenige Favoriten gibt. Ein Fetch wird besser auf viele Favoriten skaliert.

    
Tom Harrington 15.08.2013 21:31
quelle
2

Nur ein Update seit iOS 9.0 können Sie einfach mit "einzigartigen Einschränkungen" im Modell machen. Aber achten Sie darauf, wenn Ihr Geschäft bereits doppelte Stammdaten enthält, wird eine automatische Migration fehlschlagen, wenn die App ausgeliefert wurde.

Siehe hier zum Beispiel - eindeutige Beschränkungen für Kerndaten

    
shannoga 15.09.2016 10:46
quelle
1

Wenn Sie mit mehreren Datensätzen arbeiten, ist das Iterieren über ein Zählen oder Abrufen tatsächlicher Objekte auf der CPU sehr kostspielig. In meinem Fall habe ich einen Fetch für alle übereinstimmenden Datensätze ausgeführt, aber nach einem Wörterbuch nur der Zeichenfolge der UUID zurück gefragt. Spart viel CPU-Overhead.

Zum Beispiel habe ich eine UUID-Eigenschaft für jeden Datensatz in Core-Daten. Ich habe eine entsprechende UUID als @ "UUID" in CloudKit aufgeführt.

%Vor%

Das Konsolenprotokoll des Wörterbuchs sieht ungefähr so ​​aus. Nur die kleinste Menge an Informationen benötigt, um zu entsprechen:

%Vor%

Mehr hier auf der Entwicklerseite zum Finden von Unique Werte.

    
Mike Critchley 05.01.2017 10:47
quelle
1

Schnell 3 :

%Vor%     
Vahid 25.04.2017 16:36
quelle
0

Ссылка

Sieh dir den Link an. Es ist verfügbar von ios9. Sie können Schlüssel in den Einschränkungen festlegen, die Duplikate stoppen. Der Blog geht ins Detail.

Hoffe es hilft anderen:)

    
Daniel 25.04.2017 17:46
quelle

Tags und Links