核心数据连接表中有许多通过获取属性的谓词

Xcode数据模型 你如何为地方实体编写一个提取的属性,将呈现一个用户数组?

对于获取检入与指定地点相关的所有usersPlace的提取属性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声明为dynamic属性:

 @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"]; 

我希望我确实了解你。 你想要在某个地方登记的用户列表?

然后你反过来做 您获取所有至less有一个Checkin与特定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:一点点expressionForSubquery:usingIteratorVariable:predicate:

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