CoreData获取嵌套对象

时间:2015-05-12 11:26:18

标签: ios objective-c json core-data restkit

我有一个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,它与子(与自身,与一个)有关系,与父对象(对很多人)的关系

enter image description here

所以当我尝试通过谓词获取对象时

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

我在[1,3,4]中只获得了带有id的对象,但没有id = 2(这里是错误)和id = 5(这里都是正确的),因为它是' s设置为父&# 39;当id = 3的对象保存到数据库时映射。

如果没有使用谓词我有5个对象,请包含obj5。

但我需要从coredata中获取完全从json获得的对象数。

我只需要在[1,2,3,4]中获取id为id的对象。

如果可能,我如何需要写谓词?

1 个答案:

答案 0 :(得分:1)

从JSON获取的数据是所有对象的子集,但是根据其选择的逻辑不会保留在对象模型中。

你坚持孩子和父母之间的关系(提示:为了便于阅读,如果它是多人的话,将其重命名为parents),但是你的JSON示例中的选择不是基于任何这些标准。

获取所有对象的一种简单方法是提取JSON提要提供的顶级ID并在谓词中使用它:

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

(请注意,我将您的属性名称从id更改为idNumber,以避免可能的语言怪癖,因为id是保留字。)