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
。
有人知道怎么做吗?
【问题讨论】:
您能描述一下关系的性质和任何相关属性吗?尤其是isAtSchool
和monday
到底是什么?
嗨! isAtSchool 是一个具有多对多关系的实体。星期一是这个实体的一个属性。 managedObjectId 来自一个名为“Students”的实体,并使用 NSFetchedResultsController 获取,并与另一个名为“Pupils”的视图控制器分隔开来。我试图检索数据然后更新它们,当我使用 valueForKey 时,女巫工作正常,但不是 valueForKeyPath。希望这能解决一点点。干杯
【参考方案1】:
当您要求 name
属性时,您要求的是单个值,所以这没问题。但是,当您使用此关键路径时,您正在遍历一对多关系。可能有 2 个或 10 个或一百万个相关对象,但您要求的是单个 Bool
。这应该如何工作?
目前尚不清楚在这种情况下您真正想要什么。在这些潜在的数百万个相关对象中,您想如何计算 Bool
的值? 可能你想做一些事情,比如从那些(潜在的)数百万个对象中挑选出一个相关的对象,然后从那个实例中获取Bool
。但据我所知,您可能想要扫描所有这些,看看最常见的Bool
值是什么。
如何更改您的代码取决于您真正需要什么,应该如何确定单个 Bool
值。您需要以一种或另一种方式从(潜在的)数百万个相关对象获取到单个 Bool
-- 而您无法通过键路径查找来做到这一点。
【讨论】:
嗨!谢谢回答。如何使用 NSmanagedObject ID 并从一对多关系中获取单个属性?或者我不能这样做?很抱歉在这里不清楚。这是迄今为止我能做的最好的:)以上是关于objectID 多对多关系的主要内容,如果未能解决你的问题,请参考以下文章