假设关系是这样定义的:
![在此处输入图像描述](https://i.stack.imgur.com/KUIDX.png)
您可以使用“键值编码”来获取给定酒店的所有房间号:
Hotel *theHotel = ...;
NSSet *setOfRoomNumbers = [theHotel valueForKeyPath:@"categories.@distinctUnionOfSets.rooms.roomNumber"];
// And if you need an array instead of a set:
NSArray *arrayOfRoomNumbers = [setOfRoomNumbers allObjects];
这种方法的一个缺点是它首先获取所有类别,然后是房间。
或者,您可以使用反向关系对“房间”实体执行获取请求:
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Room"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"category.hotel == %@", theHotel];
request.predicate = predicate;
NSArray *rooms = [context executeFetchRequest:request error:&error];
NSArray *roomNumbers = [rooms valueForKey:@"roomNumber"];
使用 Magical Record,这可能看起来像(未经测试):
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"category.hotel == %@", theHotel];
NSArray *rooms = [Room MR_findAllWithPredicate:predicate];
NSArray *roomNumbers = [rooms valueForKey:@"roomNumber"];