使用核心数据基于多个实体设置谓词

时间:2013-03-08 09:03:02

标签: core-data nspredicate

我有两个表oldaddressnewaddress,共有字段personID。我必须从[{1}}获取personIDnewaddress的详细信息。如何在核心数据中设置相同的实体和谓词?

等效查询

oldaddress

1 个答案:

答案 0 :(得分:3)

你还没有掌握核心数据的本质。正如Martin R所指出的,它是一个对象图,而不是一个数据库。

您所描述的是一种连接表操作,它通过所谓的关系在Core Data中建模,无需外键,例如personID

此外,创建代表同一种对象的不同身份也是不好的做法。

因此,您的模型应该如下所示:

Address <<------>> User

Address应该有一个布尔属性,如isOld

在获取User时,您的谓词变得非常简单。

[NSPredicate predicateWithFormat:@"addresses.@count = 2"]; 

或者,如果您愿意,可以从UserAddress建立两个一对多的关系。

User.oldAddress <<-----------> Address
User.newAddress <<-----------> Address

带有这样的谓词

[NSPredicate predicateWithFormat:@"oldAddress != NULL && newAddress != NULL"]