gpt4 book ai didi

objective-c - 核心数据: How to dynamically change the entity of an object while maintaining common attributes

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

假设您有经典的 Manager <- Department(s) ->> Employee 数据模型。其中 Manager 继承自 Employee 实体,而 Employee 实体又继承自 Person 实体。

如果我有一个部门,有一名经理和一组员工,我如何以编程方式表示经理失业并降级为员工,而其中一名员工晋升为经理?

用核心数据的说法,我想获取一个托管对象并更改其实体,但将其保留为 Person 的子类。有一个聪明的方法来做到这一点吗?或者我是否必须编写方法来晋升员工并降级经理,如下所示:

+ (Employee *)demoteManager:(Manager *)manager {

// Get the context
NSManagedObjectContext *context = [manager managedObjectContext];

// Create a new employee object (mogenerator style)
Employee *employee = [Employee insertIntoManageObjectContext:context];

// Set attributes etc
employee.name = self.name;

// Set relationships etc
Department *dept = manager.manages;
[dept addEmployeesObject:employee];
employee.department = dept;
dept.manager = nil;
manager.manages = nil;

// Delete manager
[context deleteObject:manager];

// Save
NSError *error = nil;
[context save:&error];

return employee;
}

等等?我意识到我应该在 Employee (isManager) 上放置一个 bool 标志,但这是这个问题的人为示例,实际上我不想使用标志。

所以,如果一些核心数据向导已经做到了这一点或者知道更好的方法,我很想听听!

干杯,

最佳答案

无法更改您所描述的实体。您需要创建一名新员工,将经理的数据复制到该员工记录,并为晋升的员工创建一名新经理。

但是,正如克里斯蒂安所建议的,如果您的经理也是一名员工,那就更好了。您提到了经理特定的其他数据。也许您可以将其放入与特定员工有关系的第三个表中。然后,任何同时也是经理的员工都将在该辅助表中存储数据。远比仅仅为了提升或降级经理而销毁和创建对象要痛苦得多。

关于objective-c - 核心数据: How to dynamically change the entity of an object while maintaining common attributes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5219185/

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