objectID 多对多关系

Posted

技术标签:

【中文标题】objectID 多对多关系【英文标题】:objectID many to many relationship 【发布时间】:2017-05-30 18:03:25 【问题描述】:

我的 Swift 菜鸟编程需要一些帮助...

多对多关系中,我有一个NSManagedObjectID,我已经从另一个视图控制器中分离出来了。

为了从中检索数据,我使用了这个:

var elevid :NSManagedObjectID?

let person = context.object(with: studentId!)

nameTextField.text = person.value(forKey: "name") as? String

这很好用,但是当我尝试从关系中获取属性时,我被卡住了。

我试过这个:

let isAtSchool = person.value(forKeyPath: "isAtSchool.monday") as! Bool

但我收到一条错误消息:

无法将“__NSSingleObjectSetI”(0x10ac63aa8) 类型的值转换为“NSNumber”(0x109e5a4a8)。

如果我在 as 而不是 ! 之后使用 ?,它将返回 nil

有人知道怎么做吗?

【问题讨论】:

您能描述一下关系的性质和任何相关属性吗?尤其是isAtSchoolmonday 到底是什么? 嗨! isAtSchool 是一个具有多对多关系的实体。星期一是这个实体的一个属性。 managedObjectId 来自一个名为“Students”的实体,并使用 NSFetchedResultsController 获取,并与另一个名为“Pupils”的视图控制器分隔开来。我试图检索数据然后更新它们,当我使用 valueForKey 时,女巫工作正常,但不是 valueForKeyPath。希望这能解决一点点。干杯 【参考方案1】:

当您要求 name 属性时,您要求的是单个值,所以这没问题。但是,当您使用此关键路径时,您正在遍历一对多关系。可能有 2 个或 10 个或一百万个相关对象,但您要求的是单个 Bool。这应该如何工作?

目前尚不清楚在这种情况下您真正想要什么。在这些潜在的数百万个相关对象中,您想如何计算 Bool 的值? 可能你想做一些事情,比如从那些(潜在的)数百万个对象中挑选出一个相关的对象,然后从那个实例中获取Bool。但据我所知,您可能想要扫描所有这些,看看最常见的Bool 值是什么。

如何更改您的代码取决于您真正需要什么,应该如何确定单个 Bool 值。您需要以一种或另一种方式从(潜在的)数百万个相关对象获取到单个 Bool-- 而您无法通过键路径查找来做到这一点。

【讨论】:

嗨!谢谢回答。如何使用 NSmanagedObject ID 并从一对多关系中获取单个属性?或者我不能这样做?很抱歉在这里不清楚。这是迄今为止我能做的最好的:)

以上是关于objectID 多对多关系的主要内容,如果未能解决你的问题,请参考以下文章

使用嵌套字段在MongoDB / Mongoose中创建多对多关系?

同一张表之间多对多的级联删除

使用 Mongoose 进行多对多映射

具有额外多对多关系的 JPA 多对多

雄辩的多对多对多 - 如何轻松加载远距离关系

Hibernate学习笔记 — 多对多关系映射