Избегайте дублирования записей при импорте данных с помощью Magical Record

Я использую Magical Record для облегчения операций с Core Data. Представьте, что у нас есть такой набор json, и точно такая же определенная модель Core Data:

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

Теперь, если мы используем вспомогательный метод Magical Record:

- (BOOL) MR_importValuesForKeysWithObject:(id)objectData;

or

+ (id) MR_importFromObject:(id)data;

он будет импортирован как 5 записей Car и 5 записей Brand.

Однако в нашей модели основных данных отношение Car-Brand является отношением «многие ко многим», а атрибут имени Brand должен быть уникальным, поэтому я ожидаю 5 записей Car и 2 записи Brand (Toyota и VW). .

Мой вопрос заключается в том, как сохранить уникальность данных при импорте с помощью Core Data. Могу ли я определить это в модели Core Data, например уникальный атрибут? или мне нужно переопределить метод импорта Magical Record?


person Chris Chen    schedule 29.12.2012    source источник
comment
Вы получили ответ на это?   -  person Fogmeister    schedule 25.03.2013
comment
Я почти уверен, что вам придется решать эту проблему программно на основе forums.pragprog.com/ forums/90/topics/2875 Маркуса С. Зарры   -  person Martin Brugger    schedule 30.03.2013
comment
Согласно cimgf.com/2012/05/29/importing -data-made-easy кажется, вы можете добавить ключ 'relatedByAttribute' и сопоставить его со свойством, которое он должен рассматривать как ключ...   -  person ChickensDontClap    schedule 27.04.2013
comment
Кстати, а почему отношения "многие ко многим"? Если у вас есть Car, это может быть только один бренд, там он должен быть однозначным в отношениях от Brand до Car.   -  person runmad    schedule 04.05.2013


Ответы (1)


Вам нужно сообщить MagicalRecord, что является уникальным идентификатором. В вашем случае у вас нет уникального идентификатора, но вы, вероятно, могли бы использовать атрибут name.

Предполагая, что у вас есть Car NSManagedObject со связью с Brand NSManagedObject, вы должны установить relatedByAttribute на name для связи с Brand в словаре информации о пользователе.

После того, как вы это сделаете, MagicalRecord будет искать любые записи с атрибутом name и использовать соответствующую запись, если она уже существует, или создать ее, если это необходимо.

Это означает, что вам не придется переопределять параметр Important с помощью класса категории.

Дайте мне знать, если вам нужна дополнительная информация.

person runmad    schedule 04.05.2013