【发布时间】:2012-05-15 12:59:45
【问题描述】:
概述:
- 我使用提供的删除方法删除 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 个表(实体),即“员工”和“部门”
- 一个部门可以包含多名员工
- 一名员工只能属于一个部门
关系详情:
- “员工”与“部门”的关系是一对一的关系,称为“哪个部门”。删除规则为 Nullify
- 从“部门”到“员工”的关系是多对一关系,称为“员工”。删除规则是级联
问题:
“部门”类有一个方法调用如下,我使用这个方法后,数据库保存不成功
(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 的回答和 cmets(5 月 17 日 4:39),很好地解释了如何调试问题并找到根本原因
【问题讨论】:
-
所以它没有崩溃,它只是不删除项目?您是否尝试在调用 removeEmployees 后保存上下文?我知道如果您从 NSOrderedSet 添加/删除项目,自动生成的代码中存在错误,但这应该可以正常工作。
-
它不会崩溃,但不会删除记录。单独添加似乎如上所述工作
标签: ios core-data nsmanagedobject