8

Xcode 数据模型 您如何为将呈现用户数组的 Place 实体编写 Fetched 属性?

4

2 回答 2

16

对于Place的获取属性users,该属性检索其签到与给定地点相关的所有用户,设置

  • 获取的属性的目的地到“用户”
  • 以及“ANY checkins.event == $FETCH_SOURCE”的谓词

在此处输入图像描述

现在您可以获取某个地点的用户数组:

Place *place = ...;
NSArray *users = [place valueForKey:@"users"];

此获取的属性对应于以下获取请求:

Place *place = ...;
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"User"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY checkins.event == %@", place];
[request setPredicate:predicate];
NSArray *users = [context executeFetchRequest:request error:&error];

如果将获取的属性声明users为动态属性:

@interface Place (FetchedProperties)
@property(nonatomic, retain) NSArray *users;
@end

@implementation Place (FetchedProperties)
@dynamic users;
@end

然后您可以使用属性语法检索值:

NSArray *users = place.users;
// instead of: NSArray *users = [place valueForKey:@"users"];

但请注意,您可以直接获得相同的结果(作为一个集合),而无需使用获取的属性:

Place *place = ...;
NSSet *users = [place.checkins valueForKey:@"user"];
于 2013-01-19T09:03:21.953 回答
2

我希望我没有正确理解你。您想要在某个地方签到的用户列表吗?

然后你反过来做。你获取所有User至少有一个的Checkins Place

在核心数据术语中,您需要一个子查询。

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"User"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(checkins, $CHECKIN, $CHECKIN.event == %@).@count > 0", place];
request.predicate = predicate;
/* and so on */

关于 SUBQUERY 的文档不多。在讨论中写了一点expressionForSubquery:usingIteratorVariable:predicate:

并且获取的属性将位于具有目标实体 User 和谓词的 Place 实体中SUBQUERY(checkins, $CHECKIN, $CHECKIN.event == $FETCH_SOURCE).@count > 0

于 2013-01-19T09:01:36.793 回答