Overview:
我有一个iOS项目,我正在使用核心数据
-
我有一个
Employees
实体和一个Department
实体 . -
1个部门可以包含许多员工
-
因此实体
Department
与实体Employees
有"to many"关系,该关系称为employees
,反向关系称为whichDepartment
Aim-1:
我想删除特定部门的所有员工
Questions:
a)以下是正确的,还是会导致突变或某些问题?
b)这是正确的方法吗?
Pls Note - removeEmployees
是在创建实体的子类时自动生成的方法
- (void) deleteAllEmployeesForDepartment: (Department*) requestedDepartment
{
[requestedDepartment removeEmployees:requestedDepartment.employees];
}
Aim-2:
-
我想根据某些条件删除员工
-
我正在为获取的记录删除快速枚举循环内的对象
Questions:
c)以下是正确的,还是会引起一些变异?
d)是否喜欢在快速枚举中修改对象?
e)有更好的方法吗?
Pls Note - removeEmployees
是在创建实体的子类时自动生成的方法
- (void) deleteAllType1EmployeesWithDepartment: (Department*) requestedDepartment
{
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"type == %i AND whichDepartment ==%i", 1, requestedDepartment.departmentID];
NSError *error;
NSArray *listOfEmployeesToBeDeleted = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
for(Employees *currentEmployee in listOfEmployeesToBeDeleted)
{
[self.managedObjectContext deleteObject:currentEmployee];
}
}
1 回答
首先,在你的
deleteAllEmployeesForDepartment:
中,可以通过这种方式删除对象 .如果另外你想从Core Data中删除Employees对象,那么你应该添加另一个规则,删除规则设置为cascade,这意味着当
Employee
"losses" aDepartment
(关系被破坏时,被删除的Department
,或者Department
删除了Employee
),它(Employee
)也被删除了 .你的第二个问题更有趣 .
我建议将另一个方法直接添加到
NSManagedObeject
的Department子类中,你可以调用它 -clearEmployeesOfType:
传递一个类型号 .由于您的
Department
通过to-many关系引用了NSSet
Employees
,因此可以使用NSSet
和filteredSetUsingPredicate:
方法来过滤掉您想要的那些 .返回集可用于在
Department
上发送removeEmployees:
方法,如下所示(警告,代码未测试) .我建议使用此解决方案,而不是随时加载对象并逐个删除它们,依赖关系并删除Core Data中的规则 .