gpt4 book ai didi

cocoa - 无需 CoreData 即可管理逆向关系

转载 作者:行者123 更新时间:2023-12-03 16:25:36 30 4
gpt4 key购买 nike

这是 Objective-J/Cappuccino 的问题,但我添加了 cocoa 标签,因为框架非常相似。

Cappuccino 的缺点之一是 CoreData 尚未移植,因此您必须手动创建所有模型对象。

在 CoreData 中,您的反向关系会自动为您管理...如果您将一个对象添加到另一个对象中的一对多关系,您可以双向遍历该图。

如果没有 CoreData,是否有任何干净的方法来自动设置这些反向关系?

作为更具体的示例,我们以典型的部门和员工为例。用 Rails 术语来说,一个 Department 对象有多个员工,并且一个员工属于一个部门。

因此,我们的 Department 模型有一个 NSMutableSet (或 CPMutableSet )“员工”,其中包含一组员工,并且我们的 Employee 模型有一个变量“部门”,它指向拥有它的部门模型。

是否有一种简单的方法可以使当我将新的 Employee 模型添加到集合中时,逆关系(employee.department)自动设置?或者相反:如果我设置员工的部门模型,那么它会自动添加到该部门的员工集中吗?

正确地知道我正在创建一个对象“ValidatedModel”,它是我所有模型的子类,它添加了一些使用 KVO 设置逆关系的方法。但我担心我做了很多毫无意义的工作,而且已经有一种更简单的方法可以做到这一点。

有人可以打消我的疑虑吗?

最佳答案

我不能具体谈论 Objective-J,但在没有 Core Data 的情况下执行此操作的通常方法是在 setter 中设置逆关系。因此,使用员工/部门示例,您将执行以下操作:

- (void)setDepartment:(Department *)aDepartment {
if (department == aDepartment)
return;

[department release];
department = [aDepartment retain];

[department addEmployee:self];
}

如果新值已经与现有值匹配,您需要确保不会更新实例变量。如果您没有这样做,setDepartment: 将调用 addEmployee:,而 addEmployee: 将调用 setDepartment:无限循环。

另请注意,这是对保留周期的公开邀请。这取决于您的模型的结构,但“拥有”另一个对象的对象应该保留它。所以我的例子可能不是最好的,因为说部门“拥有”员工可能更准确。

关于cocoa - 无需 CoreData 即可管理逆向关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1521596/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com