Gor*_*not 1 cocoa cocoa-touch core-data nsmanagedobject nsmanagedobjectcontext
我有一个Person属于Department一对多关系的实体.
我希望能够删除Department时,有没有更多的Person与它(或者通过缺失的相连的S Person实体,或更改了Person的department属性).现在,我正在尝试使用以下处理程序NSManagedObjectContextObjectsDidChangeNotification(目前只是尝试查看删除,并正确删除):
- (void)managedObjectDidChange:(NSNotification *)notification {
NSSet *updatedObjects = [[notification userInfo] objectForKey:NSDeletedObjectsKey];
for (NSManagedObject *obj in updatedObjects) {
if ([obj.entity.name isEqualToString:@"Person"]) {
NSLog(@"Person Changed");
NSManagedObject *department = [(Person *)obj department];
NSLog(@"%i", [[department valueForKey:@"person"] count]);
if ([[department] valueForKey:@"person"] count] == 0) {
NSLog(@"Department has no more people associated with it");
// deletion code
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我删除某个人时,与该部门相关联的人数不会改变.我没有对Department实体进行提取.那是我应该做的吗?
最简单的方法:实现willSave你部门的实体类(?你给每个实体自己的类,右*),让您的检查部门本身[self isDeleted] == NO和[[self person] count] == 0,如果是删除自身.(检查isDeleted不是可选的,因为实体内部更改willSave会触发另一个对willSave的调用.文档NSManagedObject willSave会有更多信息.)这会推迟删除,直到将上下文刷回磁盘,这应该不是一个大问题.
如果您确实需要部门在最后一个人离开时自行删除,请让您的部门实体用KVO观察自己.注册它作为自身的"人"的财产观察员awakeFromFetch和awakeFromInsert,并取消注册willTurnIntoFault.当person属性更改时,请将其检查为空.这是更多的工作,所以只有在第一种方式不适合你时才尝试.
最后,请记住Person-> Department关系删除规则需要设置为'nullify'(当Person被删除时,它将从Department的人员中删除),而不是'no action'(当Person被删除时,你负责清理你自己)或'级联'(删除任何人,其部门也被删除!)
(*MOGenerator是一个非常好的帮手维护每个实体类.http://rentzsch.github.com/mogenerator/)
| 归档时间: |
|
| 查看次数: |
854 次 |
| 最近记录: |