我遇到了一个问题,我有一组像这样的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
}
答案 0 :(得分:0)
首先,您可能不止一次创建了同一个客户。您可以将订单添加到一个实例,但不能添加到另一个实例。 first
只会从NSSet
中检索没有定义顺序的任何一个(对于数组,这将取决于排序键)。
其次,您对customers()
的电话不熟悉。在核心数据中,您获得NSSet
与customers
的关系NSManagedObject
。如果您的x = [45 45 65 45 67 65 45 60 70 65 45]
子类中有自定义函数,则可能需要将其重命名为与关系名称不同的值。