核心数据连接表中有许多通过获取属性的谓词
你如何为地方实体编写一个提取的属性,将呈现一个用户数组?
对于获取检入与指定地点相关的所有users
的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
声明为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