Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 管理NSManagedObjects_Objective C_Cocoa_Core Data_Nsmanagedobject - Fatal编程技术网

Objective c 管理NSManagedObjects

Objective c 管理NSManagedObjects,objective-c,cocoa,core-data,nsmanagedobject,Objective C,Cocoa,Core Data,Nsmanagedobject,如果我有一个NSManagedObject,它将另一种类型的NSManagedObject的一组作为其属性之一进行维护,并且我将该组设置为nil或将其替换为另一组,那么原始组中的托管对象会发生什么情况?它们会在数据库中孤立吗?我知道如果您删除父托管对象,您可以级联删除,但这不是一回事 我想它是不是一套都没关系。如果一个托管对象引用另一个对象,而现在您希望它引用不同的对象,并且不再关心旧对象,那么您是否必须删除它 我自己做了一些测试: NSSet *set = [managedObject get

如果我有一个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,尤其是因为类引用明确告诉我不要重写

- (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声明。