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
это зарезервированное слово.)