2012-12-29 3 views
7

Ich benutze Magical Record um Core Data Operationen zu erleichtern. Stellen Sie sich vor haben wir eine Reihe von json wie diese, und ein Core Data-Modell definiert genau das gleiche:Vermeiden Sie doppelte Einträge beim Importieren von Daten mit Magical Record

{ 
    "cars": [ 
     { 
      "name": "Corolla", 
      "brand": { 
       "name": "Toyota" 
      }, 
      "price": 20000 
     }, 
     { 
      "name": "Pirus", 
      "brand": { 
       "name": "Toyota" 
      }, 
      "price": 50000 
     }, 
     { 
      "name": "RAV-4", 
      "brand": { 
       "name": "Toyota" 
      }, 
      "price": 30000 
     }, 
     { 
      "name": "Golf", 
      "brand": { 
       "name": "VW" 
      }, 
      "price": 40000 
     }, 
     { 
      "name": "Polo", 
      "brand": { 
       "name": "VW" 
      }, 
      "price": 20000 
     } 
    ] 
} 

Wenn wir nun magische Rekord Hilfsmethode verwenden:

- (BOOL) MR_importValuesForKeysWithObject:(id)objectData; 

oder

+ (id) MR_importFromObject:(id)data; 

wird es als 5 Einträge von Auto und 5 Einträge von Marke importiert werden. In unserem Core Data Modell ist die Car-Brand-Beziehung jedoch eine Viele-zu-Viele-Beziehung, und das Markenattribut von Brand soll einzigartig sein, also erwarte ich 5 Einträge von Auto und 2 Einträge von Brand (

). Toyota und VW).

Meine Frage ist, wie Sie die Dateneindeutigkeit beim Import mit Core Data erhalten. Ist das etwas, das ich im Core Data Model definieren kann, wie ein eindeutiges Attribut? oder muss ich die Importmethode von Magical Record außer Kraft setzen?

+0

Haben Sie eine Antwort darauf erhalten? – Fogmeister

+0

Ich bin mir ziemlich sicher, dass Sie dieses Problem programmatisch lösen müssen basierend auf http://forums.pragprog.com/forums/90/topics/2875 von Marcus S. Zarra –

+0

Nach http://www.cimgf.com/ 2012/05/29/importing-data-made-easy/Es scheint, dass Sie einen 'relatedByAttribute'-Schlüssel hinzufügen und ihn der Eigenschaft zuordnen können, die er als Schlüssel behandeln soll ... – ChickensDontClap

Antwort

6

Sie müssen MagicalRecord mitteilen, was die eindeutige Kennung ist. In Ihrem Fall haben Sie keine eindeutige ID, aber Sie könnten wahrscheinlich das name Attribut verwenden.

Angenommen, Sie haben eine Car NSManagedObject mit einer Beziehung zu einem Brand NSManagedObject, müssen Sie die Brand im Benutzerinfo Wörterbuch relatedByAttribute-name auf die Beziehung setzen.

Sobald Sie dies getan haben, wird MagicalRecord alle Datensätze mit dem Attribut name suchen und den entsprechenden Datensatz verwenden, falls bereits einer vorhanden ist, oder einen Datensatz erstellen, falls erforderlich.

Dies bedeutet, dass Sie nicht wichtig mit einer Kategorie-Klasse überschreiben müssen.

Lassen Sie mich wissen, wenn Sie zusätzliche Informationen benötigen.

Verwandte Themen