概述:
- 我使用自动生成的 NSManagedObject 子类中提供的删除方法删除 NSManagedObject
- 然后我尝试保存数据库
- 数据库保存不成功。
.
- (void)removeEmployees:(NSSet *)values; //Auto generated method in Department.h
但是使用 add 方法添加 NSManagedObject 可以成功保存数据库
- (void)addEmployeesObject:(Employee *)value; //Auto generated method in Department.h - works fine
注意:我使用的是 XCode 生成的 NSManagedObject 子类。
实体详情:
- 我有 2 个表(实体),即“员工”和“部门”
- 一个部门可以包含多名员工
- 一名员工只能属于一个部门
关系详情:
- 从“Employee”到“Department”的关系是一对一的关系,称为“whichDepartment”。删除规则为无效
- 从“部门”到“员工”的关系是多对一的关系,称为“员工”。删除规则是级联
问题:
“部门”类有一个方法调用如下,我使用这个方法后,数据库保存不成功
(void)removeEmployees:(NSSet *)values; //Auto generated method in Department.h //does not work
用于删除的代码:
- (void) removeEmployeesHavingAgeAsZeroWithDepartment: (Department*) department
{
NSMutableSet *employeesSetToBeRemoved = [[NSMutableSet alloc] init];
for(Employees *currentEmployee in department.employees)
{
if(currentEmployee.age == 0)
{
[employeesSetToBeRemoved addObject:currentEmployee];
}
}
[department removeEmployees:employeesSetToBeRemoved]; //causing the problem
}
用于保存数据库的代码
[self.database saveToURL:self.database.fileURL forSaveOperation:UIDocumentSaveForOverwriting completionHandler:^(BOOL success)
{NSLog(@"DB saved");}];
问题:
- 为什么使用remove方法后保存数据库不成功?
- 我需要实现这个方法吗?目前我没有看到这个方法的任何实现,我只能在头文件中找到它。
- 我的关系(反向、删除规则等)是否设置正确?
回答:
- 请参考 Jody 的回答和评论(5 月 17 日 4:39),很好地解释了如何调试问题并找到根本原因