首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS -核心数据-使用关系和获取请求删除记录

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

Stack Overflow用户
提问于 2012-05-12 01:48:35
回答 1查看 3.1K关注 0票数 0

概述:

我有一个使用核心数据的iOS项目

  • I有一个Employees实体和一个Department实体,
  • 1部门可以包含多个员工
  • ,因此实体Department与实体Employees有"to多“关系,这种关系称为employees,反向关系被称为Employees

Aim-1:

我要删除某一部门的所有员工。

问题:

( a)以下内容是正确的,还是会引起突变或一些问题?

( b)这是正确的做法吗?

Pls Note - removeEmployees是在创建实体的子类时自动生成的方法。

代码语言:javascript
复制
- (void) deleteAllEmployeesForDepartment: (Department*) requestedDepartment
{
    [requestedDepartment removeEmployees:requestedDepartment.employees];
}

Aim-2:

  • 我想根据某些条件删除雇员,我要删除获取记录

的快速枚举循环中的对象

问题:

( c)以下是正确的,还是会引起某些突变?

( d)是否类似于在快速枚举中修改对象?

( e)是否有更好的办法来做到这一点?

Pls Note - removeEmployees是在创建实体的子类时自动生成的方法。

代码语言:javascript
复制
- (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];
    }
}
EN

回答 1

Stack Overflow用户

发布于 2012-05-12 02:11:54

首先,在您的deleteAllEmployeesForDepartment:中,这样删除对象是很好的。

此外,如果要从核心数据中删除员工对象,则应该添加另一条规则,即设置为级联的删除规则,这意味着当Employee“丢失”一个Department (关系被Department删除,或Department删除Employee)时,它( Employee)也被删除。

你的第二个问题更有趣。

我建议的是将另一个方法直接添加到NSManagedObeject的Department子类中,您可以将其称为-传递类型号的clearEmployeesOfType:

由于您的Department通过to -多关系引用了NSSet of Employees,所以您可以使用NSSetfilteredSetUsingPredicate:方法筛选出您想要的关系。

返回集可用于在您的removeEmployees:上传递Department方法,类似于以下内容(警告,代码未测试)。

代码语言:javascript
复制
- (void) clearEmployeesOfType:(NSUInteger)type
{ 
    NSPredicate * predicate = [NSPredicate predicateWithFormat:@"SELF.type == %d", type];
    NSSet * firedEmployees = [self.employees filteredSetUsingPredicate:predicate];

    [self removeEmployees:firedEmployees];
}

我推荐这个解决方案,而不是加载对象,然后一个接一个地删除对象,只要有可能,就依赖关系并删除Core数据中的规则。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10560406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档