2012-12-29 12 views
7

Używam Rekordu Magicznego w celu ułatwienia operacji na Rdzeniu Danych. Wyobraźmy sobie, że mamy zbiór json jak ta, a model Core danych określono dokładnie taka sama:Unikaj zduplikowanych wpisów podczas importowania danych za pomocą Zapisu Magicznego

{ 
    "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 
     } 
    ] 
} 

Teraz, jeśli używamy magicznego sposobu Record pomocnika:

- (BOOL) MR_importValuesForKeysWithObject:(id)objectData; 

lub

+ (id) MR_importFromObject:(id)data; 

zostanie zaimportowane jako 5 wpisów samochodu i 5 wpisów marki.

Jednak w naszym modelu danych podstawowych relacja Car-Brand ma wiele do wielu, a nazwa marki ma być unikatowa, dlatego oczekuję 5 wpisów z samochodu i 2 wpisy marki (Toyota i VW).

Moje pytanie brzmi: jak zachować wyjątkowość danych podczas importowania za pomocą danych podstawowych. Czy to coś, co mogę zdefiniować w modelu Core Data, jak unikalny atrybut? lub czy muszę zastąpić metodę importu Magical Record?

+0

Czy otrzymałeś na to odpowiedź? – Fogmeister

+0

Jestem prawie pewien, że będziesz musiał rozwiązać ten problem programowo w oparciu o http://forums.pragprog.com/forums/90/topics/2875 autorstwa Marcusa S. Zarry –

+0

Według http://www.cimgf.com/ 2012/05/29/importing-data-made-easy/wygląda na to, że możesz dodać klucz relatedByAttribute i zamapować go na właściwość, którą powinien traktować jako klucz ... – ChickensDontClap

Odpowiedz

6

Musisz powiedzieć MagicalRecord, jaki jest unikalny identyfikator. W twoim przypadku nie masz unikalnego identyfikatora, ale prawdopodobnie możesz użyć atrybutu name.

Zakładając masz Car NSManagedObject z relacji do Brand NSManagedObject, trzeba ustawić relatedByAttribute do name w stosunku do Brand w słowniku Informacja o użytkowniku.

Gdy to zrobisz, MagicalRecord sprawdzi wszystkie rekordy z atrybutem name i użyje odpowiedniego rekordu, jeśli już istnieje, lub utworzy go, jeśli będzie to potrzebne.

Oznacza to, że nie musisz zastępować ważnych z klasą kategorii.

Daj mi znać, jeśli potrzebujesz dodatkowych informacji.

Powiązane problemy