首页 文章

iOS - 核心数据 - 使用关系和获取请求删除记录

提问于
浏览
0

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 回答

  • 0

    首先,在你的 deleteAllEmployeesForDepartment: 中,可以通过这种方式删除对象 .

    如果另外你想从Core Data中删除Employees对象,那么你应该添加另一个规则,删除规则设置为cascade,这意味着当 Employee "losses" a Department (关系被破坏时,被删除的 Department ,或者 Department 删除了 Employee ),它( Employee )也被删除了 .

    你的第二个问题更有趣 .

    我建议将另一个方法直接添加到 NSManagedObeject 的Department子类中,你可以调用它 - clearEmployeesOfType: 传递一个类型号 .

    由于您的 Department 通过to-many关系引用了 NSSet Employees ,因此可以使用 NSSetfilteredSetUsingPredicate: 方法来过滤掉您想要的那些 .

    返回集可用于在 Department 上发送 removeEmployees: 方法,如下所示(警告,代码未测试) .

    - (void) clearEmployeesOfType:(NSUInteger)type
    { 
        NSPredicate * predicate = [NSPredicate predicateWithFormat:@"SELF.type == %d", type];
        NSSet * firedEmployees = [self.employees filteredSetUsingPredicate:predicate];
    
        [self removeEmployees:firedEmployees];
    }
    

    我建议使用此解决方案,而不是随时加载对象并逐个删除它们,依赖关系并删除Core Data中的规则 .

相关问题