管理 NSManagedObject
Posted
技术标签:
【中文标题】管理 NSManagedObject【英文标题】:Managing NSManagedObjects 【发布时间】:2011-09-01 15:24:35 【问题描述】:如果我有一个 NSManagedObject,它维护一组另一种类型的 NSManagedObject 作为其属性之一,并且我将该集设置为 nil 或将其替换为不同的集,那么原始集中的托管对象会发生什么情况?他们会在数据库中成为孤儿吗?我知道如果您删除父托管对象,您可以级联删除,但这不是一回事。
我想它是否是一套并不重要。如果一个托管对象引用了另一个托管对象,而现在您希望它引用不同的对象并且不再关心旧对象,那么您是否必须将其删除。
我自己做了一些测试:
NSSet *set = [managedObject getDefaultSet]; //at this point I can access the set
[managedObject setDefaultSet:newSet]; //at this point I can't access it anymore!
CoreData 似乎做了一些神奇的事情,因为在我用新集合替换集合后,我无法再使用 gdb 访问旧集合。但这是否意味着它不再在数据库中?我无法访问它,但我还需要从数据库中物理删除它吗?
编辑:新测试:
NSSet *set = [managedObject getDefaultSet]; //at this point I can access the set
id object = [set anyObject];
[managedObject setDefaultSet:newSet]; //at this point I can't access it anymore! BUT I can still access the object
我已经验证该对象仍然存在,所以现在我想我确实需要删除它。我的猜测是覆盖 setDefaultSet 属性。核心数据的默认 mutator 属性是什么样的?我不认为我想覆盖 setValue:forKey 尤其是因为类引用明确告诉我不要。
【问题讨论】:
你能把代码贴在你的get/set方法里吗 我没有。我有@property 声明。 【参考方案1】:这是我现在要使用的解决方案:
- (void)setDefaultSet:(NSSet *)set
NSMutableSet *oldSet = [self mutableSetValueForKey:@"defaultSet"];
for (NSManagedObject *object in oldSet)
//remove object from context
[oldSet removeAllObjects];
[oldSet addObjectsFromArray:[set allObjects]];
我添加了自己的访问器/修改器
【讨论】:
以上是关于管理 NSManagedObject的主要内容,如果未能解决你的问题,请参考以下文章
JavaWeb SSM SpringBoot商家订单管理系统《精品毕设》源码+论文)用户管理部门管理菜单管理角色管理字典管理操作日志生成管理等功能
jsp+servlet+mysql实现的停车场管理系统(分为普通用户和管理员,实现注册登录留言管理停车信息管理IC卡管理用户管理出入场管理等)