CoreData关系不一致(Swift)

时间:2015-10-24 20:48:14

标签: ios json swift core-data relationships

我遇到了一个问题,我有一组像这样的CoreData对象:

组织>客户>订单> ordersku

这些关系中的每一个都是一对多的。

在订购屏幕中,这适用于以下情况:

print(order.customer.getJSON()) - (客户包含其包含订单的JSON)

[
    "id": 300,
    "orders": ({
         customer_id = 300;
         deliverydate = "<null>";
         id = "-681F71DDA4B5413782A6150C10F7A314";
         skus = ({
             code = "CC1";
             id = "-4B5C1EE9DB8745A8963F6167C6DAA4F3";
           },
             code = "CC2";
             id = "-B3FB1A7F13334351AF9D85D9150730A1";
           });
    }),
]

但是,如果我在将一个对象深入到关系中时尝试相同的操作:

print(order.customer.organisation.customers()。first!.getJSON()) - (组织只有一个客户)

[
    "id": 300,
    "orders": (),
]

我根本没有得到任何订单。当我尝试为客户生成JSON时,这证明是有问题的。

这两个请求直接在彼此之后执行,这意味着模型的状态不应该在两者之间发生变化。

let cus1 = order.customer
print("== \(cus1.getJSON())")

let cus2 = order.customer.organisation.customers().first!
print("== \(cus2.getJSON())")

if cus1 == cus2 {
    print("MATCHED")
} else {
    print("UNMATCHED")
}

尽管ID相同,但在概念上指的是相同且唯一的客户,它会导致“UNMATCHED”。

如果它有帮助,下面是我在组织上使用的customers()方法的代码,它只是引用关系而不是尝试从上下文中检索对象。

func customers() -> [Customer] {
    var customers = relatedcustomers.allObjects as! [Customer]

    return customers
}

1 个答案:

答案 0 :(得分:0)

首先,您可能不止一次创建了同一个客户。您可以将订单添加到一个实例,但不能添加到另一个实例。 first只会从NSSet中检索没有定义顺序的任何一个(对于数组,这将取决于排序键)。

其次,您对customers()的电话不熟悉。在核心数据中,您获得NSSetcustomers的关系NSManagedObject。如果您的x = [45 45 65 45 67 65 45 60 70 65 45]子类中有自定义函数,则可能需要将其重命名为与关系名称不同的值。