2015-05-12 3 views
0

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

[ 
    { 
     "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, который имеет отношение к ребенку (к самому себе, к одному) и отношение к родителю (для многих)

enter image description here

Так что, когда я пытаюсь принести объект, предикат как

[NSPredicate predicateWithFormat:@"[email protected] = 0"] 

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

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

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

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

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

+0

Итак, вы хотите, чтобы принести объекты верхнего уровня, а не вложенные элементы в формате JSON (что на самом деле никакого отношения к которым пункты родители или дети в хранилище данных)? – Wain

+0

Да, только верхний, но в базовом объекте с id = 2, теперь как второй уровень? –

+0

Почему это неправильно, что вы не получаете obj2? С obj3 вы добавляете родительский объект в obj2, поэтому его родительский 'count' is> 0 – geo

ответ

1

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

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

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

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

(Заметьте, что я изменил свое имя атрибута из id в idNumber для того, чтобы избежать возможных причуды языка, так как id является зарезервированным словом.)