0

我需要一些关于我的 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)。

如果我使用?after as 而不是!它返回nil.

有人知道怎么做吗?

4

1 回答 1

0

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

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

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

于 2017-05-30T19:28:48.907 回答