Objective c 管理NSManagedObjects
如果我有一个NSManagedObject,它将另一种类型的NSManagedObject的一组作为其属性之一进行维护,并且我将该组设置为nil或将其替换为另一组,那么原始组中的托管对象会发生什么情况?它们会在数据库中孤立吗?我知道如果您删除父托管对象,您可以级联删除,但这不是一回事 我想它是不是一套都没关系。如果一个托管对象引用另一个对象,而现在您希望它引用不同的对象,并且不再关心旧对象,那么您是否必须删除它 我自己做了一些测试:Objective c 管理NSManagedObjects,objective-c,cocoa,core-data,nsmanagedobject,Objective C,Cocoa,Core Data,Nsmanagedobject,如果我有一个NSManagedObject,它将另一种类型的NSManagedObject的一组作为其属性之一进行维护,并且我将该组设置为nil或将其替换为另一组,那么原始组中的托管对象会发生什么情况?它们会在数据库中孤立吗?我知道如果您删除父托管对象,您可以级联删除,但这不是一回事 我想它是不是一套都没关系。如果一个托管对象引用另一个对象,而现在您希望它引用不同的对象,并且不再关心旧对象,那么您是否必须删除它 我自己做了一些测试: NSSet *set = [managedObject get
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,尤其是因为类引用明确告诉我不要重写
- (void)setDefaultSet:(NSSet *)set
{
NSMutableSet *oldSet = [self mutableSetValueForKey:@"defaultSet"];
for (NSManagedObject *object in oldSet)
//remove object from context
[oldSet removeAllObjects];
[oldSet addObjectsFromArray:[set allObjects]];
}
我添加了我自己的访问器/变异器你能在get/set方法中发布代码吗我没有。我有@property声明。