NSFetchRequest - 从关系中获取实体

时间:2014-05-10 18:49:03

标签: ios core-data nspredicate nsfetchrequest

我有两个实体:警报和约会,它们具有一对一的关系。

现在,我想使用NSFetchRequest检索给定约会的闹钟。

我试过了:

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:ALARM_ENTITY_NAME];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"forAppointment.objectID = %@", [appointment objectID]];

抛出:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath forAppointment.objectID not found in entity <NSSQLEntity Alarm id=1>'

有谁知道我怎么做到这一点?

2 个答案:

答案 0 :(得分:1)

只需使用

[NSPredicate predicateWithFormat:@"forAppointment = %@", appointment]

仅当objectID来自其他托管对象时,才需要使用appointment 上下文。在那种情况下

[NSPredicate predicateWithFormat:@"forAppointment = %@", [appointment objectID]]

应该有效。 (== %@的右侧可以是托管对象或其对象ID。 您不必在谓词本身中指定“objectID”。)

答案 1 :(得分:0)

如果两者之间存在1-1关系(如果您已为实体实现了NSManagedObject子类),则无需进行提取。走一下关键路径:

Alarm *alarm = appointment.alarm;

或者,如果您正在使用原始NSManagedObject

NSManagedObject *alarm = [appointment valueForKeyPath:@"alarm"];