我有两个实体:警报和约会,它们具有一对一的关系。
现在,我想使用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>'
有谁知道我怎么做到这一点?
答案 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"];