Core Data 如何为关系设置值?

Posted

技术标签:

【中文标题】Core Data 如何为关系设置值?【英文标题】:Core Data How to set a value for relationship? 【发布时间】:2016-11-19 16:29:48 【问题描述】:

假设,我在父母和孩子之间有一对多的关系。

如何通过代码设置孩子的父母?类似的东西:

[child setValue: ParentManagedObject forKey: ParentRelationship];

在哪里 child - 在与 parent 有关系的 child managedObject 中。 ParentManagedObject - 是父对象,在应用启动时被提取到单例 ParentRelationship - 是 .xcdatamodeld 中的一个键


我知道我可以为父母和孩子创建 NSManagedObjectSubclass 并像这样做

child.ParentRelationship = ParentManagedObject;

但我想知道如何在不创建子类的情况下进行操作。

【问题讨论】:

我认为您不能在核心数据 entity 中使用 attributescustomType。对于关系,您必须创建 NSManagedObject 的子类。 【参考方案1】:

当然您可以使用KVC 来获取或设置NSManagedObject 的属性。

对于一对一或一对多的关系,您可以使用:

[child setValue:parent forKey:parentKey];

对于多对一或多对多使用:

NSMutableSet *relationshipSet = [parent mutableSetValueForKey:childrenKey];
[relationshipSet addObject:child];

其中parentchildNSManagedObject 实例。

【讨论】:

[child setValue:parent forKey:parentKey] 不起作用 你是否在parent实体中指定了反向关系? 我做了一个简单的test project。它绝对有效。见[AppDelegate applicationDidBecomeActive:]

以上是关于Core Data 如何为关系设置值?的主要内容,如果未能解决你的问题,请参考以下文章

Core Data 中关系的默认值

如何为依赖于关系的自定义 Core Data 属性发布通知?

如何为给定的 Core Data 实体创建和保存一组对象/数组?

如何为一个非常大的 Core Data 数据库创建一个快速搜索机制?

如何为 jquery inputmask 设置 autoUnmask?

如何为 .NET Core 3.0 Worker 服务设置事件日志