我有两个表oldaddress
和newaddress
,共同字段personID
。我必须从newaddress
得到personID
的细节,它也存在于oldaddress
中。如何在核心数据中设置相同的实体和谓词?使用核心数据设置基于多个实体的谓词
等效查询是
select a.personID from new address a, oldaddress b where a.personID=b.personID
我有两个表oldaddress
和newaddress
,共同字段personID
。我必须从newaddress
得到personID
的细节,它也存在于oldaddress
中。如何在核心数据中设置相同的实体和谓词?使用核心数据设置基于多个实体的谓词
等效查询是
select a.personID from new address a, oldaddress b where a.personID=b.personID
你还没有掌握核心数据的本质。正如Martin R指出的那样,它是一个对象图,而不是数据库。
你所描述的是一个连接表操作,它是通过所谓的关系在核心数据中建模的,无需外键,例如personID
。
此外,创建代表同一种对象的不同身份也是不好的做法。
因此,你的模型应该是这个样子:
Address <<------>> User
和Address
应该有一个布尔属性像isOld
。
提取User
时,您的谓词变得非常简单。
[NSPredicate predicateWithFormat:@"[email protected] = 2"];
或者,你可以从User
两个一到多的关系,Address
如果你喜欢。
User.oldAddress <<-----------> Address
User.newAddress <<-----------> Address
像这样
[NSPredicate predicateWithFormat:@"oldAddress != NULL && newAddress != NULL"]
+ 1这是主题首发应该做的事情。 – 2013-03-08 14:19:36
这是可以做到的谓词,但你应该考虑重新思考模式。 [Core Data是一个对象图管理器,而不是数据库!](http://www.cocoawithlove.com/2010/02/differences-between-core-data-and.html)。更核心的Data''s方式是定义两个实体* Person *和* Address *,并在它们之间建立关系* oldaddress *和* newaddress *。 – 2013-03-08 10:09:09