这就是我所拥有的:
我在核心数据模型中有实体部门和实体员工。 部门有很多员工,员工只有一个部门(反向)。 我已将Department上的删除规则设置为级联。
假设我的部门目前有雇员朱迪和罗恩。
我的问题是,当我将部门的员工关系设置为其他员工的NSSet时,如何确保Judy和Ron被删除:
[department setEmployees:someOtherEmployeesSet];
即。我正在覆盖部门的员工领域,并希望立即删除以前的员工。
目前,如果我这样做,他们仍然在核心数据中:
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Employee"];
NSArray* allEmployees = [context executeFetchRequest:request error:nil];
NSLog(@"Employees: %@", [allEmployees debugDescription]);
这将在控制台中为Judy和Ron输出以下内容:(看起来不会被删除)
<Employee: 0x14e33620> (entity: Employee; id: 0x14e43230 <x-coredata://4A73CA04-
C30C-44B4-88D5-73179F3A065F/Employee/p2> ; data: <fault>),
<Employee: 0x14e48880> (entity: Employee; id: 0x14e43c10 <x-coredata://4A73CA04-
C30C-44B4-88D5-73179F3A065F/Employee/p3> ; data: <fault>)
我必须做什么才能删除Judy和Ron?
答案 0 :(得分:0)
删除规则(例如“Cascade”)仅在部门对象时应用 删除。在您的情况下,您必须明确删除“以前的员工” 在分配新集之前:
NSSet *oldEmployees = department.employees;
for (Employee *e in oldEmployees) {
[context deleteObject:e];
}
department.employees = someOtherEmployeesSet;