如何在核心数据中保存与另一个对象相关的对象?

Posted

技术标签:

【中文标题】如何在核心数据中保存与另一个对象相关的对象?【英文标题】:How can I save an object that's related to another object in core data? 【发布时间】:2012-05-04 14:19:58 【问题描述】:

我在建立一对一的关系时遇到了困难。在***别,我有一对多的关系。我将使用典型的经理、员工、示例来解释我正在尝试做的事情。为了更进一步,我正在尝试为员工添加一对一的众议院关系。

当我对 NSManagedObject 进行子类化时为我创建的 addEmployeesToManagereObject 方法,我添加了员工没有问题。当我在我的表视图中选择一个员工时,我设置了 Employee 类型的 currentEmployee - 它在我的 .h 中声明。

现在我有了当前员工,我想保存与当前员工相关的 Houses 实体属性。

我真正苦苦挣扎的部分是设置 managedObjectContext 以及设置和保存与 currentEmployee 相关的房屋属性。

我已经尝试了几件事,但这是我的最后一次尝试:

注意:employeeToHouse 是一个 House 类型的属性,它是为 当我继承 NSManagedObject 时的我

House *theHouse = [NSEntityDescription 
                   insertNewObjectForEntityForName:@"House"
                   inManagedObjectContext:self.managedObjectContext];
// This is where I'm lost, trying to set the House
// object through the employeeToHouse relationship
self.currentEmployee.employeeToHouse

如何访问并保存当前雇员的房屋属性?

【问题讨论】:

【参考方案1】:

由于 House 设置为实体,因此可以将其视为数据存储中的表。如果确实如此,您需要在数据模型中设置 Employee 和 House 之间的一对一关系。

如果你已经这样做了,那么它就像调用一样简单。尽管我对 Core Data 的一对一关系不如我对多对多的熟悉。无论哪种情况,请尝试以下方法之一

[self.currentEmployee addHouseObject: theHouse];

self.currentEmployee.employeeToHouse=theHouse;

然后保存到managedObjectContext:

NSError *error=nil;
if (![self.managedObjectContext save:&error]

    NSLog(@"Core Data Save Error:  %@", error);

另外,我不确定您的具体情况,但您的 self.managedObjectContext 应该已经与 self.currentEmployee.managedObjectContext 所指的相同。

祝你好运,

提姆

【讨论】:

感谢您的帮助以及您对 managedobjectcontext 的绝对正确性。我确实在员工和房子之间创建了我的反对一关系,但是由于某种原因,xcode 没有像我在经理和员工之间的一对多关系中那样在我的子类文件中生成 addHouseObject 方法。在我的 Employee.h 中,我看到的对 House 的唯一引用是为我创建的属性:@property(nonatomic,strong) House *employeeToHouse。我认为必须有一种方法可以通过为我创建的财产来拯救房子。不过不确定。

以上是关于如何在核心数据中保存与另一个对象相关的对象?的主要内容,如果未能解决你的问题,请参考以下文章

核心数据 - 如何初始化对象但不将其添加到持久存储?

如何在核心数据中正确保存可转换对象?

获取核心数据相关对象

删除核心数据对象时,如何在 Swift 5 中同时删除其所有相关对象?

核心数据:托管对象与上下文一起保存后如何撤消操作

如何将获取的对象保存到核心数据