CoreData извлекает вложенные объекты

У меня есть JSON, которые содержат объекты, где каждый объект имеет дочерний объект, например

[
    {
        "id": 1,
        "name": "obj1"
    },
    {
        "id": 2,
        "name": "obj2"
    },
    {
        "id": 3,
        "name": "obj3",
        "child": {
            "id": 2,
            "name": "obj2"
        }
    },
    {
        "id": 4,
        "name": "obj4",
        "child": {
            "id": 5,
            "name": "obj5"
        }
    }
]

Таким образом, в основных данных у меня есть сущность MyObject, которая имеет отношение к дочернему элементу (к себе, к одному) и к родительскому элементу (ко многим)

введите описание изображения здесь

Поэтому, когда я пытаюсь получить объект по предикату, как

[NSPredicate predicateWithFormat:@"parent.@count = 0"]

Я получил только объект с идентификатором в [1,3,4], но нет с id = 2 (здесь ошибка) и id = 5 (здесь все правильно), потому что он был установлен родительским, когда он отображается при сохранении объекта с id = 3 к базе данных.

Если предикат бесполезен, я получил 5 объектов, включите obj5.

Но мне нужно получить из coredata точное количество объектов, что я получил от JSON.

Мне нужно получить только объект с идентификатором в [1,2,3,4].

Как мне нужно написать предикат, если это возможно?

1 ответ

Данные, которые вы получили из JSON, являются подмножеством всех ваших объектов, но логика, в соответствии с которой они выбираются, не сохраняется в вашей объектной модели.

Вы сохраняете отношения между ребенком и родителем (подсказка: для удобства чтения переименуйте его в parents если это ко-многим), но выбор в вашем примере JSON не основан ни на одном из этих критериев.

Один простой способ получить все объекты - извлечь идентификаторы верхнего уровня, предоставленные фидом JSON, и использовать их в предикате:

NSArray *ids = [jsonArray valueForKey:@"id"];
[NSPredicate predicateWithFormat:@"idNumber in %@", ids];

(Обратите внимание, что я изменил имя вашего атрибута с id в idNumber во избежание возможных языковых ошибок id это зарезервированное слово.)

Другие вопросы по тегам