Core data CoreData:故障未通过一对一关系触发

Core data CoreData:故障未通过一对一关系触发,core-data,relationship,one-to-one,fault,Core Data,Relationship,One To One,Fault,我有三个实体: 通知 PlanDate 用户 关系: 通知与计划日期 通知也与用户 代码: 以下是日志: 2013-08-21 12:26:50.349 Time[5018:c07] Selected Object From Detail ViewDidLoad <Notification: 0xa58ee70> (entity: Notification; id: 0xb2a5480 <x-coredata://C0FB76AD-19EB-42BA-981A-F99

我有三个实体:

  • 通知
  • PlanDate
  • 用户
关系:

  • 通知
    计划日期
  • 通知
    也与
    用户
代码:

以下是日志:

2013-08-21 12:26:50.349 Time[5018:c07] Selected Object From  Detail ViewDidLoad <Notification: 0xa58ee70> (entity: Notification; id: 0xb2a5480 <x-coredata://C0FB76AD-19EB-42BA-981A-F99DD6DCF6C7-5018-0000101A36CFA3D1/Notification/p0B2ABAC1-77F3-4F46-B14D-34652F148B37> ; data: {
appType = 1;
invitationType = PlanDate;
lastmoddate = "2013-08-21 17:42:42 +0000";
"notification_id" = "0B2ABAC1-77F3-4F46-B14D-34652F148B37";
plandate = "0xa1c9350 <x-coredata://C0FB76AD-19EB-42BA-981A-F99DD6DCF6C7-5018-0000101A36CFA3D1/Notification/p1C004B2B-F1DA-4EE0-9FAC-0A89E0DBCDB7>";
users = "<relationship fault: 0xb2aa210 'users'>";
})
2013-08-21 12:26:50.350 Time[5018:c07] planDateObject <Notification: 0xb292800> (entity: Notification; id: 0xa1c9350 <x-coredata://C0FB76AD-19EB-42BA-981A-F99DD6DCF6C7-5018-0000101A36CFA3D1/Notification/p1C004B2B-F1DA-4EE0-9FAC-0A89E0DBCDB7> ; data: <fault>)
2013-08-21 12:26:53.406 Time[5018:c07] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<Notification 0xb292800> valueForUndefinedKey:]: the entity Notification is not key value coding-compliant for the key "recipientUserName".'
2013-08-21 12:26:50.349时间[5018:c07]从详细视图中选择的对象加载(实体:通知;id:0xb2a5480;数据:{
appType=1;
邀请类型=计划日期;
lastmoddate=“2013-08-21 17:42:42+0000”;
“通知id”=“0B2ABAC1-77F3-4F46-B14D-34652F148B37”;
plandate=“0xa1c9350”;
用户=”;
})
2013-08-21 12:26:50.350时间[5018:c07]planDateObject(实体:通知;id:0xa1c9350;数据:)
2013-08-21 12:26:53.406时间[5018:c07]***由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[valueForUndefinedKey:]:实体通知不符合密钥“recipientUserName”的键值编码。”
确实存在一个带有值的属性“recipientUserName”。我尝试过其他属性,它们会生成相同的日志

为什么会出错?当我试图访问其属性时,为什么数据显示为fault

编辑


错误消息指出,实体
通知
上实际上没有名为
recipientUserName
的属性。让我们浏览一下你的结果,看看发生了什么。首先你要这样做:

NSLog (@"Selected Object From  Detail ViewDidLoad %@", managedObject);
NSManagedObject *planDateObject = ((PlanDate *)[managedObject valueForKey:@"plandate"]);        
NSLog(@"planDateObject %@", planDateObject);
NSString *recipientUserName = [planDateObject valueForKey:@"recipientUserName"];
结果是:

2013-08-21 12:26:50.349 Time[5018:c07] Selected Object From  Detail ViewDidLoad <Notification: 0xa58ee70> (entity: Notification; id: 0xb2a5480 <x-coredata://C0FB76AD-19EB-42BA-981A-F99DD6DCF6C7-5018-0000101A36CFA3D1/Notification/p0B2ABAC1-77F3-4F46-B14D-34652F148B37> ; data: {
appType = 1;
invitationType = PlanDate;
lastmoddate = "2013-08-21 17:42:42 +0000";
"notification_id" = "0B2ABAC1-77F3-4F46-B14D-34652F148B37";
plandate = "0xa1c9350 <x-coredata://C0FB76AD-19EB-42BA-981A-F99DD6DCF6C7-5018-0000101A36CFA3D1/Notification/p1C004B2B-F1DA-4EE0-9FAC-0A89E0DBCDB7>";
users = "<relationship fault: 0xb2aa210 'users'>";
})
结果是:

2013-08-21 12:26:50.350 Time[5018:c07] planDateObject <Notification: 0xb292800> (entity: Notification; id: 0xa1c9350 <x-coredata://C0FB76AD-19EB-42BA-981A-F99DD6DCF6C7-5018-0000101A36CFA3D1/Notification/p1C004B2B-F1DA-4EE0-9FAC-0A89E0DBCDB7> ; data: <fault>)
您正在尝试获取
recipientUserName
属性的值。但是我们已经知道,
planDateObject
是一个
通知
,并且
通知
没有该名称的属性。因此,尝试访问不存在的密钥时会出现异常


因此,如果您的
PlanDate
实体具有名为
recipientUserName
的属性,那么您的问题是
PlanDate
关系指向错误的对象。如果
PlanDate
没有该属性,则您有更复杂的问题,无法从您提供的信息中解决。

感谢Tom的详细解释!我刚才在另一个问题上读你的答案。我开始感觉到我在“通知”实体中查找“recipientUserName”是错误的。PlanDate绝对具有“recipientUserName”属性。我无法通过通知到达plandate对象。我应该发布如何建立关系的屏幕截图吗?好的,我用设置图像更新了它。我想我可能把关系安排错了。是的,相反的关系搞砸了
PlanDate.notification
看起来不错,但是
notification.PlanDate
正指向
notification
。将其更改为指向
PlanDate
,并将反向关系设置修复为指向
PlanDate.notification
NSString *recipientUserName = [planDateObject valueForKey:@"recipientUserName"];